Kaynağa Gözat

权限树 授权

duyj 2 yıl önce
ebeveyn
işleme
55b034969f
29 değiştirilmiş dosya ile 1894 ekleme ve 8 silme
  1. 8 1
      suishenbang-admin/src/main/java/com/dgtly/web/controller/system/SysUserController.java
  2. 176 0
      suishenbang-admin/src/main/java/com/dgtly/web/controller/system/SysUserOrderAuthorController.java
  3. 79 0
      suishenbang-admin/src/main/resources/templates/system/author/add.html
  4. 135 0
      suishenbang-admin/src/main/resources/templates/system/author/author.html
  5. 80 0
      suishenbang-admin/src/main/resources/templates/system/author/edit.html
  6. 49 0
      suishenbang-admin/src/main/resources/templates/system/author/tree.html
  7. 116 0
      suishenbang-admin/src/main/resources/templates/system/user/author.html
  8. 3 0
      suishenbang-admin/src/main/resources/templates/system/user/edit.html
  9. 9 1
      suishenbang-admin/src/main/resources/templates/system/user/user.html
  10. 13 0
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/AnalysisDiyCustomerComponent.java
  11. 5 2
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/HanaOrderComponent.java
  12. 2 1
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/impl/AnalysisSysUserService.java
  13. 7 0
      suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/utils/CustomerAccessTokenUtil.java
  14. 60 0
      suishenbang-system/src/main/java/com/dgtly/system/domain/SysUserAuthorRel.java
  15. 112 0
      suishenbang-system/src/main/java/com/dgtly/system/domain/SysUserOrderAuthor.java
  16. 63 0
      suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserAuthorRelMapper.java
  17. 65 0
      suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserOrderAuthorMapper.java
  18. 61 0
      suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserAuthorRelService.java
  19. 79 0
      suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserOrderAuthorService.java
  20. 95 0
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserAuthorRelServiceImpl.java
  21. 205 0
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserOrderAuthorServiceImpl.java
  22. 65 0
      suishenbang-system/src/main/resources/mapper/system/SysUserAuthorRelMapper.xml
  23. 109 0
      suishenbang-system/src/main/resources/mapper/system/SysUserOrderAuthorMapper.xml
  24. 102 0
      suishenbang-wxportal/suishenbang-wxportal-api/src/main/java/com/dgtly/wxportal/controller/EsignController.java
  25. 9 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/service/ESignService.java
  26. 87 1
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/service/impl/ESignServiceImpl.java
  27. 92 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/ESign/ESignHttpUtil.java
  28. 1 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/ESign/ESignUrl.java
  29. 7 2
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/pdf/PDFUtil.java

+ 8 - 1
suishenbang-admin/src/main/java/com/dgtly/web/controller/system/SysUserController.java

@@ -75,6 +75,13 @@ public class SysUserController extends BaseController
         return prefix + "/selectUser";
     }
 
+    @GetMapping("/author/{userId}")
+    public String authUser(@PathVariable("userId") Long userId, ModelMap mmap)
+    {
+        mmap.put("user", userService.selectUserById(userId));
+        return prefix + "/author";
+    }
+
     @RequiresPermissions("system:user:list")
     @PostMapping("/list")
     @ResponseBody
@@ -86,7 +93,7 @@ public class SysUserController extends BaseController
         List<SysUser> list = userService.selectUserList(user);
         return getDataTable(list);
     }
-
+    
     @Log(title = "用户管理", businessType = BusinessType.EXPORT)
     @RequiresPermissions("system:user:export")
     @PostMapping("/export")

+ 176 - 0
suishenbang-admin/src/main/java/com/dgtly/web/controller/system/SysUserOrderAuthorController.java

@@ -0,0 +1,176 @@
+package com.dgtly.web.controller.system;
+
+import java.util.List;
+
+import com.dgtly.system.domain.SysUserAuthorRel;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.dgtly.common.annotation.Log;
+import com.dgtly.common.enums.BusinessType;
+import com.dgtly.system.domain.SysUserOrderAuthor;
+import com.dgtly.system.service.ISysUserOrderAuthorService;
+import com.dgtly.common.core.controller.BaseController;
+import com.dgtly.common.core.domain.AjaxResult;
+import com.dgtly.common.utils.poi.ExcelUtil;
+import com.dgtly.common.utils.StringUtils;
+import com.dgtly.common.core.domain.Ztree;
+
+/**
+ * 权限Controller
+ * 
+ * @author dgtly
+ * @date 2022-03-22
+ */
+@Controller
+@RequestMapping("/system/author")
+public class SysUserOrderAuthorController extends BaseController
+{
+    private String prefix = "system/author";
+
+    @Autowired
+    private ISysUserOrderAuthorService sysUserOrderAuthorService;
+
+    @RequiresPermissions("system:author:view")
+    @GetMapping()
+    public String author()
+    {
+        return prefix + "/author";
+    }
+
+    /**
+     * 查询权限树列表
+     */
+    @RequiresPermissions("system:author:list")
+    @PostMapping("/list")
+    @ResponseBody
+    public List<SysUserOrderAuthor> list(SysUserOrderAuthor sysUserOrderAuthor)
+    {
+        List<SysUserOrderAuthor> list = sysUserOrderAuthorService.selectSysUserOrderAuthorList(sysUserOrderAuthor);
+        return list;
+    }
+
+    /**
+     * 导出权限列表
+     */
+    @RequiresPermissions("system:author:export")
+    @PostMapping("/export")
+    @ResponseBody
+    public AjaxResult export(SysUserOrderAuthor sysUserOrderAuthor)
+    {
+        List<SysUserOrderAuthor> list = sysUserOrderAuthorService.selectSysUserOrderAuthorList(sysUserOrderAuthor);
+        ExcelUtil<SysUserOrderAuthor> util = new ExcelUtil<SysUserOrderAuthor>(SysUserOrderAuthor.class);
+        return util.exportExcel(list, "author");
+    }
+
+    /**
+     * 新增权限
+     */
+    @GetMapping(value = { "/add/{authorId}", "/add/" })
+    public String add(@PathVariable(value = "authorId", required = false) Long authorId, ModelMap mmap)
+    {
+        if (StringUtils.isNotNull(authorId))
+        {
+            mmap.put("sysUserOrderAuthor", sysUserOrderAuthorService.selectSysUserOrderAuthorById(authorId));
+        }
+        return prefix + "/add";
+    }
+
+    /**
+     * 新增保存权限
+     */
+    @RequiresPermissions("system:author:add")
+    @Log(title = "权限", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    @ResponseBody
+    public AjaxResult addSave(SysUserOrderAuthor sysUserOrderAuthor)
+    {
+        return toAjax(sysUserOrderAuthorService.insertSysUserOrderAuthor(sysUserOrderAuthor));
+    }
+
+    /**
+     * 修改权限
+     */
+    @GetMapping("/edit/{authorId}")
+    public String edit(@PathVariable("authorId") Long authorId, ModelMap mmap)
+    {
+        SysUserOrderAuthor sysUserOrderAuthor = sysUserOrderAuthorService.selectSysUserOrderAuthorById(authorId);
+        mmap.put("sysUserOrderAuthor", sysUserOrderAuthor);
+        return prefix + "/edit";
+    }
+
+    /**
+     * 修改保存权限
+     */
+    @RequiresPermissions("system:author:edit")
+    @Log(title = "权限", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(SysUserOrderAuthor sysUserOrderAuthor)
+    {
+        return toAjax(sysUserOrderAuthorService.updateSysUserOrderAuthor(sysUserOrderAuthor));
+    }
+
+    /**
+     * 删除
+     */
+    @RequiresPermissions("system:author:remove")
+    @Log(title = "权限", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{authorId}")
+    @ResponseBody
+    public AjaxResult remove(@PathVariable("authorId") Long authorId)
+    {
+        return toAjax(sysUserOrderAuthorService.deleteSysUserOrderAuthorById(authorId));
+    }
+
+    @RequiresPermissions("system:author:edit")
+    @Log(title = "修改用户权限", businessType = BusinessType.DELETE)
+    @PostMapping("/tree/edit")
+    @ResponseBody
+    public AjaxResult editAuthor(SysUserAuthorRel item)
+    {
+        return toAjax(sysUserOrderAuthorService.insertRel(item));
+    }
+
+    /**
+     * 查询用户权限树
+     */
+    @RequiresPermissions("system:author:config")
+    @GetMapping("/tree/{userId}")
+    @ResponseBody
+    public List<Ztree> list(@PathVariable("userId") Long userId)
+    {
+        List<Ztree> list = sysUserOrderAuthorService.userAuthorTreeData(userId);
+        return list;
+    }
+
+    /**
+     * 选择权限树
+     */
+    @GetMapping(value = { "/selectAuthorTree/{authorId}", "/selectAuthorTree/" })
+    public String selectAuthorTree(@PathVariable(value = "authorId", required = false) Long authorId, ModelMap mmap)
+    {
+        if (StringUtils.isNotNull(authorId))
+        {
+            mmap.put("sysUserOrderAuthor", sysUserOrderAuthorService.selectSysUserOrderAuthorById(authorId));
+        }
+        return prefix + "/tree";
+    }
+
+    /**
+     * 加载权限树列表
+     */
+    @GetMapping("/treeData")
+    @ResponseBody
+    public List<Ztree> treeData()
+    {
+        List<Ztree> ztrees = sysUserOrderAuthorService.selectSysUserOrderAuthorTree();
+        return ztrees;
+    }
+}

+ 79 - 0
suishenbang-admin/src/main/resources/templates/system/author/add.html

@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('新增权限')" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
+        <form class="form-horizontal m" id="form-author-add">
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">权限名称:</label>
+                <div class="col-sm-8">
+                    <input name="authorName" class="form-control" type="text" required>
+                </div>
+            </div>
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">父权限ID:</label>
+                <div class="col-sm-8">
+                    <div class="input-group">
+                        <input id="treeId" name="parentId" type="hidden" th:value="${sysUserOrderAuthor?.authorId}"/>
+                        <input class="form-control" type="text" onclick="selectAuthorTree()" id="treeName" readonly="true" th:value="${sysUserOrderAuthor?.authorName}">
+                        <span class="input-group-addon"><i class="fa fa-search"></i></span>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">权限编码:</label>
+                <div class="col-sm-8">
+                    <input name="code" class="form-control" type="text" required>
+                </div>
+            </div>
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">显示顺序:</label>
+                <div class="col-sm-8">
+                    <input name="orderNum" class="form-control" type="text">
+                </div>
+            </div>
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">权限类型:</label>
+                <div class="col-sm-8">
+                    <select name="authorType" class="form-control m-b" th:with="type=${@dict.getType('author_type')}">
+                        <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
+                    </select>
+                </div>
+            </div>
+        </form>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script type="text/javascript">
+        var prefix = ctx + "system/author"
+        $("#form-author-add").validate({
+            focusCleanup: true
+        });
+
+        function submitHandler() {
+            if ($.validate.form()) {
+                $.operate.save(prefix + "/add", $('#form-author-add').serialize());
+            }
+        }
+
+        /*权限-新增-选择父部门树*/
+        function selectAuthorTree() {
+            var options = {
+                title: '权限选择',
+                width: "380",
+                url: prefix + "/selectAuthorTree/" + $("#treeId").val(),
+                callBack: doSubmit
+            };
+            $.modal.openOptions(options);
+        }
+
+        function doSubmit(index, layero){
+            var body = layer.getChildFrame('body', index);
+               $("#treeId").val(body.find('#treeId').val());
+               $("#treeName").val(body.find('#treeName').val());
+               layer.close(index);
+        }
+    </script>
+</body>
+</html>

+ 135 - 0
suishenbang-admin/src/main/resources/templates/system/author/author.html

@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+    <th:block th:include="include :: header('权限列表')" />
+</head>
+<body class="gray-bg">
+     <div class="container-div">
+        <div class="row">
+            <div class="col-sm-12 search-collapse">
+                <form id="formId">
+                    <div class="select-list">
+                        <ul>
+                            <li>
+                                <p>权限名称:</p>
+                                <input type="text" name="authorName"/>
+                            </li>
+                            <li>
+                                <p>父权限ID:</p>
+                                <input type="text" name="parentId"/>
+                            </li>
+                            <li>
+                                <p>权限编码:</p>
+                                <input type="text" name="code"/>
+                            </li>
+                            <li>
+                                <p>显示顺序:</p>
+                                <input type="text" name="orderNum"/>
+                            </li>
+                            <li>
+                                <p>权限类型:</p>
+                                <select name="authorType" th:with="type=${@dict.getType('author_type')}">
+                                    <option value="">所有</option>
+                                    <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
+                                </select>
+                            </li>
+                            <li>
+                                <a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+                            </li>
+                        </ul>
+                    </div>
+                </form>
+            </div>
+
+            <div class="btn-group-sm" id="toolbar" role="group">
+                <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:author:add">
+                    <i class="fa fa-plus"></i> 新增
+                </a>
+                <a class="btn btn-primary" onclick="$.operate.edit()" shiro:hasPermission="system:author:edit">
+                    <i class="fa fa-edit"></i> 修改
+                </a>
+                <a class="btn btn-info" id="expandAllBtn">
+                    <i class="fa fa-exchange"></i> 展开/折叠
+                </a>
+            </div>
+            <div class="col-sm-12 select-table table-striped">
+                <table id="bootstrap-tree-table"></table>
+            </div>
+        </div>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var addFlag = [[${@permission.hasPermi('system:author:add')}]];
+        var editFlag = [[${@permission.hasPermi('system:author:edit')}]];
+        var removeFlag = [[${@permission.hasPermi('system:author:remove')}]];
+        var authorTypeDatas = [[${@dict.getType('author_type')}]];
+        var prefix = ctx + "system/author";
+
+        $(function() {
+            var options = {
+                code: "authorId",
+                parentCode: "parentId",
+                expandColumn: "1",
+                uniqueId: "authorId",
+                url: prefix + "/list",
+                createUrl: prefix + "/add/{id}",
+                updateUrl: prefix + "/edit/{id}",
+                removeUrl: prefix + "/remove/{id}",
+                exportUrl: prefix + "/export",
+                modalName: "权限",
+                columns: [{
+                    field: 'selectItem', 
+                    radio: true
+                },
+                {
+                    field : 'authorName', 
+                    title : '权限名称',
+                    align: 'left'
+                },
+                {
+                    field : 'parentId', 
+                    title : '父权限ID',
+                    align: 'left'
+                },
+                {
+                    field : 'code', 
+                    title : '权限编码',
+                    align: 'left'
+                },
+                {
+                    field : 'orderNum', 
+                    title : '显示顺序',
+                    align: 'left'
+                },
+                {
+                    field : 'authorType', 
+                    title : '权限类型',
+                    align: 'left',
+                    formatter: function(value, row, index) {
+                        return $.table.selectDictLabel(authorTypeDatas, value);
+                    }
+                },
+                {
+                    field : 'remark', 
+                    title : '备注',
+                    align: 'left'
+                },
+                {
+                    title: '操作',
+                    align: 'center',
+                    align: 'left',
+                    formatter: function(value, row, index) {
+                        var actions = [];
+                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.authorId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                        actions.push('<a class="btn btn-info  btn-xs ' + addFlag + '" href="javascript:void(0)" onclick="$.operate.add(\'' + row.authorId + '\')"><i class="fa fa-plus"></i>新增</a> ');
+                        actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.authorId + '\')"><i class="fa fa-remove"></i>删除</a>');
+                        return actions.join('');
+                    }
+                }]
+            };
+            $.treeTable.init(options);
+        });
+    </script>
+</body>
+</html>

+ 80 - 0
suishenbang-admin/src/main/resources/templates/system/author/edit.html

@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('修改权限')" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
+        <form class="form-horizontal m" id="form-author-edit" th:object="${sysUserOrderAuthor}">
+            <input name="authorId" th:field="*{authorId}" type="hidden">
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">权限名称:</label>
+                <div class="col-sm-8">
+                    <input name="authorName" th:field="*{authorName}" class="form-control" type="text" required>
+                </div>
+            </div>
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">父权限ID:</label>
+                <div class="col-sm-8">
+                    <div class="input-group">
+                        <input id="treeId" name="parentId" type="hidden" th:field="*{parentId}" />
+                        <input class="form-control" type="text" onclick="selectAuthorTree()" id="treeName" readonly="true" th:field="*{parentName}">
+                        <span class="input-group-addon"><i class="fa fa-search"></i></span>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">权限编码:</label>
+                <div class="col-sm-8">
+                    <input name="code" th:field="*{code}" class="form-control" type="text" required>
+                </div>
+            </div>
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">显示顺序:</label>
+                <div class="col-sm-8">
+                    <input name="orderNum" th:field="*{orderNum}" class="form-control" type="text">
+                </div>
+            </div>
+            <div class="form-group">    
+                <label class="col-sm-3 control-label">权限类型:</label>
+                <div class="col-sm-8">
+                    <select name="authorType" class="form-control m-b" th:with="type=${@dict.getType('author_type')}">
+                        <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{authorType}"></option>
+                    </select>
+                </div>
+            </div>
+        </form>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script type="text/javascript">
+        var prefix = ctx + "system/author";
+        $("#form-author-edit").validate({
+            focusCleanup: true
+        });
+
+        function submitHandler() {
+            if ($.validate.form()) {
+                $.operate.save(prefix + "/edit", $('#form-author-edit').serialize());
+            }
+        }
+
+        /*权限-新增-选择父部门树*/
+        function selectAuthorTree() {
+            var options = {
+                title: '权限选择',
+                width: "380",
+                url: prefix + "/selectAuthorTree/" + $("#treeId").val(),
+                callBack: doSubmit
+            };
+            $.modal.openOptions(options);
+        }
+
+        function doSubmit(index, layero){
+            var body = layer.getChildFrame('body', index);
+               $("#treeId").val(body.find('#treeId').val());
+               $("#treeName").val(body.find('#treeName').val());
+               layer.close(index);
+        }
+    </script>
+</body>
+</html>

+ 49 - 0
suishenbang-admin/src/main/resources/templates/system/author/tree.html

@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('权限树选择')" />
+    <th:block th:include="include :: ztree-css" />
+</head>
+<style>
+    body{height:auto;font-family: "Microsoft YaHei";}
+    button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
+</style>
+<body class="hold-transition box box-main">
+    <input id="treeId"   name="treeId"    type="hidden" th:value="${sysUserOrderAuthor?.authorId}"/>
+    <input id="treeName" name="treeName"  type="hidden" th:value="${sysUserOrderAuthor?.authorName}"/>
+    <div class="wrapper"><div class="treeShowHideButton" onclick="$.tree.toggleSearch();">
+        <label id="btnShow" title="显示搜索" style="display:none;">︾</label>
+        <label id="btnHide" title="隐藏搜索">︽</label>
+    </div>
+    <div class="treeSearchInput" id="search">
+        <label for="keyword">关键字:</label><input type="text" class="empty" id="keyword" maxlength="50">
+        <button class="btn" id="btn" onclick="$.tree.searchNode()"> 搜索 </button>
+    </div>
+    <div class="treeExpandCollapse">
+        <a href="#" onclick="$.tree.expand()">展开</a> /
+        <a href="#" onclick="$.tree.collapse()">折叠</a>
+    </div>
+    <div id="tree" class="ztree treeselect"></div>
+    </div>
+    <th:block th:include="include :: footer" />
+    <th:block th:include="include :: ztree-js" />
+    <script th:inline="javascript">
+        $(function() {
+            var url = ctx + "system/author/treeData";
+            var options = {
+                url: url,
+                expandLevel: 2,
+                onClick : zOnClick
+            };
+            $.tree.init(options);
+        });
+
+        function zOnClick(event, treeId, treeNode) {
+            var treeId = treeNode.id;
+            var treeName = treeNode.name;
+            $("#treeId").val(treeId);
+            $("#treeName").val(treeName);
+        }
+    </script>
+</body>
+</html>

+ 116 - 0
suishenbang-admin/src/main/resources/templates/system/user/author.html

@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+	<th:block th:include="include :: header('修改角色')" />
+	<th:block th:include="include :: ztree-css" />
+</head>
+<body class="white-bg">
+	<div class="wrapper wrapper-content animated fadeInRight ibox-content">
+		<form class="form-horizontal m" id="form-role-edit" th:object="${user}">
+			<input id="userId" name="userId" type="hidden" th:field="*{userId}"/>
+
+			<div class="form-group">
+				<label class="col-sm-3 control-label">菜单权限</label>
+				<div class="col-sm-8">
+					<div id="menuTrees" class="ztree"></div>
+				</div>
+			</div>
+		</form>
+	</div>
+	<th:block th:include="include :: footer" />
+	<th:block th:include="include :: ztree-js" />
+	<script type="text/javascript">
+	     $(function() {
+			var url = ctx + "system/author/tree/" + $("#userId").val();
+			var options = {
+				id: "menuTrees",
+		        url: url,
+		        check: { enable: true },
+		        expandLevel: 0
+		    };
+			$.tree.init(options);
+		});
+	
+		$("#form-role-edit").validate({
+			onkeyup: false,
+			rules:{
+				roleName:{
+					remote: {
+		                url: ctx + "system/role/checkRoleNameUnique",
+		                type: "post",
+		                dataType: "json",
+		                data: {
+							"roleId": function() {
+							    return $("#roleId").val();
+							},
+							"roleName": function() {
+							    return $.common.trim($("#roleName").val());
+							}
+		                },
+		                dataFilter: function(data, type) {
+		                	return $.validate.unique(data);
+		                }
+		            }
+				},
+				roleKey:{
+					remote: {
+		                url: ctx + "system/role/checkRoleKeyUnique",
+		                type: "post",
+		                dataType: "json",
+		                data: {
+							"roleId": function() {
+								return $("#roleId").val();
+							},
+							"roleKey": function() {
+							    return $.common.trim($("#roleKey").val());
+							}
+		                },
+		                dataFilter: function(data, type) {
+		                	return $.validate.unique(data);
+		                }
+		            }
+				},
+				roleSort:{
+					digits:true
+				},
+			},
+			messages: {
+		        "roleName": {
+		            remote: "角色名称已经存在"
+		        },
+		        "roleKey": {
+		            remote: "角色权限已经存在"
+		        }
+		    },
+		    focusCleanup: true
+		});
+
+		function edit() {
+			var userId = $("input[name='userId']").val();
+			var authorIds = $.tree.getCheckedNodes();
+			$.ajax({
+				cache : true,
+				type : "POST",
+				url : ctx + "system/author/tree/edit",
+				data : {
+					"userId": userId,
+					"authorIds": authorIds
+				},
+				async : false,
+				error : function(request) {
+					$.modal.alertError("系统错误");
+				},
+				success : function(data) {
+					$.operate.successCallback(data);
+				}
+			});
+		}
+		
+		function submitHandler() {
+	        if ($.validate.form()) {
+	        	edit();
+	        }
+	    }
+	</script>
+</body>
+</html>

+ 3 - 0
suishenbang-admin/src/main/resources/templates/system/user/edit.html

@@ -295,6 +295,9 @@
         if(post.indexOf('5') != -1){
             postValue += " 厨卫经理 ";
         }
+        if(post.indexOf('6') != -1){
+            postValue += " 厨卫业务人员 ";
+        }
         if (post.indexOf('0') != -1){
             postValue += " 导购 ";
         }

+ 9 - 1
suishenbang-admin/src/main/resources/templates/system/user/user.html

@@ -129,6 +129,7 @@
 
 	<script th:inline="javascript">
 		var editFlag = [[${@permission.hasPermi('system:user:edit')}]];
+		var authorFlag = [[${@permission.hasPermi('system:author:config')}]];
 		var removeFlag = [[${@permission.hasPermi('system:user:remove')}]];
 		var resetPwdFlag = [[${@permission.hasPermi('system:user:resetPwd')}]];
         var bondedFlag = [[${@permission.hasPermi('system:user:bonded')}]];//接触绑定
@@ -250,6 +251,7 @@
 					width: "180px",
 		            formatter: function(value, row, index) {
 		                var actions = [];
+		                actions.push('<a class="btn btn-success btn-xs ' + authorFlag + '" href="javascript:void(0)" onclick="authorTree(\'' + row.userId + '\')"><i class="fa fa-edit"></i>权限</a> ');
 		                actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editTab(\'' + row.userId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
 		                actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.userId + '\')"><i class="fa fa-remove"></i>删除</a> ');
 		                actions.push('<a class="btn btn-info btn-xs ' + resetPwdFlag + '" href="javascript:void(0)" onclick="resetPwd(\'' + row.userId + '\')"><i class="fa fa-key"></i>重置</a>');
@@ -261,7 +263,13 @@
 		    };
 		    $.table.init(options);
 		}
-		
+
+		/* 权限树 */
+		function authorTree(userId) {
+			var url = prefix + '/author/' + userId;
+			$.modal.open("用户权限管理", url,500);
+		}
+
 		function queryDeptTree()
 		{
 			var url = ctx + "system/dept/treeData";

+ 13 - 0
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/AnalysisDiyCustomerComponent.java

@@ -296,6 +296,19 @@ public class AnalysisDiyCustomerComponent {
             throw e;
         }
 
+        try {
+            JSONObject bossListJson = JSONObject.parseObject(HttpUtils.sendSSLGet(customerAccessTokenUtil.getUrl(UrlType.BUSINESSLIST, null)));
+            code = bossListJson.getInteger("code");
+            if (code == 0) {
+                success += buildSysUserEbr(bossListJson, loginNameSet, diyNameSet, 6, failDetails, packageId, chainsMap);
+                total += bossListJson.getJSONArray("userlist").size();
+            }
+        } catch (Exception e) {
+            log.error("获取厨卫业务人员列表接口错误!");
+            customerAccessTokenUtil.reSetToken();
+            throw e;
+        }
+
         try{
             syncLog.setTotalCount(total);
             syncLog.setSuccessCount(success);

+ 5 - 2
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/HanaOrderComponent.java

@@ -94,7 +94,8 @@ public class HanaOrderComponent {
                 "                T.ZCODE1,\n" +
                 "                T.ZCODE1_DESC,\n" +
                 "                T.ZCODE4,\n" +
-                "                T.ZCODE4_DESC \n" +
+                "                T.ZCODE4_DESC, \n" +
+                "                T.BSTKD_E \n" +
                 "FROM (\n" +
                 "\n" +
                 "SELECT\n" +
@@ -140,7 +141,8 @@ public class HanaOrderComponent {
                 "                CAL.ZCODE1,\n" +
                 "                CAL.ZCODE1_DESC,\n" +
                 "                CAL.ZCODE4,\n" +
-                "                CAL.ZCODE4_DESC "+
+                "                CAL.ZCODE4_DESC, "+
+                "                A.BSTKD_E "+
                 "FROM \"_SYS_BIC\".\"com.sd/CAL_SALES\"" +
                 "('PLACEHOLDER' = ('$$IP_ENDDATE$$',\n" +
                 "\t '"+DateUtils.dateTime()+"'),\n" +
@@ -341,6 +343,7 @@ public class HanaOrderComponent {
                                 +"?"+ result.getString("ZCODE1_DESC")
                                 +"?"+ result.getString("ZCODE4")
                                 +"?"+ result.getString("ZCODE4_DESC")
+                                +"?"+ result.getString("BSTKD_E")
                                 + "\r\n");
 
 

+ 2 - 1
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/service/impl/AnalysisSysUserService.java

@@ -569,7 +569,8 @@ public class AnalysisSysUserService implements IAnalysisSysUserService {
 
                     if (companyPostNameSet.contains(postName) || companyDeptPostNameSet.contains(orgName) || companyEndPostNameSet.contains(orgName)) {
                         if (companyEndPostNameSet.contains(orgName)) {
-                            if (postName != null && (postName.trim().endsWith("部主管") || postName.trim().endsWith("部门主管"))) {
+                            if (postName != null && (postName.trim().endsWith("部主管") || postName.trim().endsWith("部门主管")
+                                    || postName.trim().endsWith("部主管(代)") || postName.trim().endsWith("部门主管(代)"))) {
                                 userExt.setSalesLevel("cw_diy");
                             }else{
                                 throw new OutOfDIYPostNameException(m);

+ 7 - 0
suishenbang-sync/suishenbang-sync-common/src/main/java/com/dgtly/sync/utils/CustomerAccessTokenUtil.java

@@ -21,6 +21,7 @@ public class CustomerAccessTokenUtil {
         RESELLER,
         BOSSLIST,
         MANAGERLIST,
+        BUSINESSLIST,
         WAREHOUSE;
 
 
@@ -68,6 +69,8 @@ public class CustomerAccessTokenUtil {
     private String managerUrl ;
     //获取经销商分销业务员人员列表(分页)
     private String resellerUrl ;
+    //获取厨卫业务员人员
+    private String businessUrl ;
 
     @PostConstruct
     public void init() {
@@ -79,6 +82,7 @@ public class CustomerAccessTokenUtil {
         bossListUrl =domain+"/wechatwork/chuwei/v1/user/boss/list?access_token=%s";
         managerUrl =domain+"/wechatwork/chuwei/v1/user/manager/list?access_token=%s";
         resellerUrl =domain+"/api/diydt/v2/user/reseller/list?page=%s&access_token=%s";
+        businessUrl =domain+"/wechatwork/chuwei/v1/user/business/list?access_token=%s";
     }
 
     public String getAccessToken(){
@@ -149,6 +153,9 @@ public class CustomerAccessTokenUtil {
             case MANAGERLIST:
                 url = String.format(managerUrl,token);
                 break;
+            case BUSINESSLIST:
+                url = String.format(businessUrl, token);
+                break;
         }
         return url;
     }

+ 60 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/SysUserAuthorRel.java

@@ -0,0 +1,60 @@
+package com.dgtly.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dgtly.common.annotation.Excel;
+import com.dgtly.common.core.domain.BaseEntity;
+
+/**
+ * 【请填写功能名称】对象 sys_user_author_rel
+ * 
+ * @author dgtly
+ * @date 2022-03-23
+ */
+public class SysUserAuthorRel extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long userId;
+
+    /** $column.columnComment */
+    private Long authorId;
+
+    private Long[] authorIds;
+
+    public Long[] getAuthorIds() {
+        return authorIds;
+    }
+
+    public void setAuthorIds(Long[] authorIds) {
+        this.authorIds = authorIds;
+    }
+
+    public void setUserId(Long userId)
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setAuthorId(Long authorId) 
+    {
+        this.authorId = authorId;
+    }
+
+    public Long getAuthorId() 
+    {
+        return authorId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("userId", getUserId())
+            .append("authorId", getAuthorId())
+            .toString();
+    }
+}

+ 112 - 0
suishenbang-system/src/main/java/com/dgtly/system/domain/SysUserOrderAuthor.java

@@ -0,0 +1,112 @@
+package com.dgtly.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dgtly.common.annotation.Excel;
+import com.dgtly.common.core.domain.TreeEntity;
+
+/**
+ * 权限对象 sys_user_order_author
+ * 
+ * @author dgtly
+ * @date 2022-03-22
+ */
+public class SysUserOrderAuthor extends TreeEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 权限ID */
+    private Long authorId;
+
+    /** 权限名称 */
+    @Excel(name = "权限名称")
+    private String authorName;
+
+    /** 父权限ID */
+    @Excel(name = "父权限ID")
+    private Long parentId;
+
+    /** 权限编码 */
+    @Excel(name = "权限编码")
+    private String code;
+
+    /** 显示顺序 */
+    @Excel(name = "显示顺序")
+    private Integer orderNum;
+
+    /** 权限类型(A应用 M目录 C菜单 F按钮) */
+    @Excel(name = "权限类型", readConverterExp = "A=应用,M=目录,C=菜单,F=按钮")
+    private String authorType;
+
+    public void setAuthorId(Long authorId) 
+    {
+        this.authorId = authorId;
+    }
+
+    public Long getAuthorId() 
+    {
+        return authorId;
+    }
+    public void setAuthorName(String authorName) 
+    {
+        this.authorName = authorName;
+    }
+
+    public String getAuthorName() 
+    {
+        return authorName;
+    }
+    public void setParentId(Long parentId) 
+    {
+        this.parentId = parentId;
+    }
+
+    public Long getParentId() 
+    {
+        return parentId;
+    }
+    public void setCode(String code) 
+    {
+        this.code = code;
+    }
+
+    public String getCode() 
+    {
+        return code;
+    }
+    public void setOrderNum(Integer orderNum) 
+    {
+        this.orderNum = orderNum;
+    }
+
+    public Integer getOrderNum() 
+    {
+        return orderNum;
+    }
+    public void setAuthorType(String authorType) 
+    {
+        this.authorType = authorType;
+    }
+
+    public String getAuthorType() 
+    {
+        return authorType;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("authorId", getAuthorId())
+            .append("authorName", getAuthorName())
+            .append("parentId", getParentId())
+            .append("code", getCode())
+            .append("orderNum", getOrderNum())
+            .append("authorType", getAuthorType())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 63 - 0
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserAuthorRelMapper.java

@@ -0,0 +1,63 @@
+package com.dgtly.system.mapper;
+
+import com.dgtly.system.domain.SysUserAuthorRel;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ * 
+ * @author dgtly
+ * @date 2022-03-23
+ */
+public interface SysUserAuthorRelMapper 
+{
+    /**
+     * 查询【请填写功能名称】
+     * 
+     * @param userId 【请填写功能名称】ID
+     * @return 【请填写功能名称】
+     */
+    public SysUserAuthorRel selectSysUserAuthorRelById(Long userId);
+
+    /**
+     * 查询【请填写功能名称】列表
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 【请填写功能名称】集合
+     */
+    public List<SysUserAuthorRel> selectSysUserAuthorRelList(SysUserAuthorRel sysUserAuthorRel);
+
+    /**
+     * 新增【请填写功能名称】
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 结果
+     */
+    public int insertSysUserAuthorRel(SysUserAuthorRel sysUserAuthorRel);
+
+    /**
+     * 修改【请填写功能名称】
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 结果
+     */
+    public int updateSysUserAuthorRel(SysUserAuthorRel sysUserAuthorRel);
+
+    /**
+     * 删除【请填写功能名称】
+     * 
+     * @param userId 【请填写功能名称】ID
+     * @return 结果
+     */
+    public int deleteSysUserAuthorRelById(Long userId);
+
+    /**
+     * 批量删除【请填写功能名称】
+     * 
+     * @param userIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSysUserAuthorRelByIds(String[] userIds);
+
+    public int batchRel(List<SysUserAuthorRel> roleMenuList);
+}

+ 65 - 0
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserOrderAuthorMapper.java

@@ -0,0 +1,65 @@
+package com.dgtly.system.mapper;
+
+import com.dgtly.system.domain.SysUserOrderAuthor;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 权限Mapper接口
+ * 
+ * @author dgtly
+ * @date 2022-03-22
+ */
+public interface SysUserOrderAuthorMapper 
+{
+    /**
+     * 查询权限
+     * 
+     * @param authorId 权限ID
+     * @return 权限
+     */
+    public SysUserOrderAuthor selectSysUserOrderAuthorById(Long authorId);
+
+    /**
+     * 查询权限列表
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 权限集合
+     */
+    public List<SysUserOrderAuthor> selectSysUserOrderAuthorList(SysUserOrderAuthor sysUserOrderAuthor);
+
+    public List<Long> selectAuthorTree(@Param("userId")Long userId);
+
+    /**
+     * 新增权限
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 结果
+     */
+    public int insertSysUserOrderAuthor(SysUserOrderAuthor sysUserOrderAuthor);
+
+    /**
+     * 修改权限
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 结果
+     */
+    public int updateSysUserOrderAuthor(SysUserOrderAuthor sysUserOrderAuthor);
+
+    /**
+     * 删除权限
+     * 
+     * @param authorId 权限ID
+     * @return 结果
+     */
+    public int deleteSysUserOrderAuthorById(Long authorId);
+
+    /**
+     * 批量删除权限
+     * 
+     * @param authorIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSysUserOrderAuthorByIds(String[] authorIds);
+}

+ 61 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserAuthorRelService.java

@@ -0,0 +1,61 @@
+package com.dgtly.system.service;
+
+import com.dgtly.system.domain.SysUserAuthorRel;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service接口
+ * 
+ * @author dgtly
+ * @date 2022-03-23
+ */
+public interface ISysUserAuthorRelService 
+{
+    /**
+     * 查询【请填写功能名称】
+     * 
+     * @param userId 【请填写功能名称】ID
+     * @return 【请填写功能名称】
+     */
+    public SysUserAuthorRel selectSysUserAuthorRelById(Long userId);
+
+    /**
+     * 查询【请填写功能名称】列表
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 【请填写功能名称】集合
+     */
+    public List<SysUserAuthorRel> selectSysUserAuthorRelList(SysUserAuthorRel sysUserAuthorRel);
+
+    /**
+     * 新增【请填写功能名称】
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 结果
+     */
+    public int insertSysUserAuthorRel(SysUserAuthorRel sysUserAuthorRel);
+
+    /**
+     * 修改【请填写功能名称】
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 结果
+     */
+    public int updateSysUserAuthorRel(SysUserAuthorRel sysUserAuthorRel);
+
+    /**
+     * 批量删除【请填写功能名称】
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSysUserAuthorRelByIds(String ids);
+
+    /**
+     * 删除【请填写功能名称】信息
+     * 
+     * @param userId 【请填写功能名称】ID
+     * @return 结果
+     */
+    public int deleteSysUserAuthorRelById(Long userId);
+}

+ 79 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserOrderAuthorService.java

@@ -0,0 +1,79 @@
+package com.dgtly.system.service;
+
+import com.dgtly.system.domain.SysUserAuthorRel;
+import com.dgtly.system.domain.SysUserOrderAuthor;
+import java.util.List;
+import com.dgtly.common.core.domain.Ztree;
+
+/**
+ * 权限Service接口
+ * 
+ * @author dgtly
+ * @date 2022-03-22
+ */
+public interface ISysUserOrderAuthorService 
+{
+    /**
+     * 查询权限
+     * 
+     * @param authorId 权限ID
+     * @return 权限
+     */
+    public SysUserOrderAuthor selectSysUserOrderAuthorById(Long authorId);
+
+    /**
+     * 查询权限列表
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 权限集合
+     */
+    public List<SysUserOrderAuthor> selectSysUserOrderAuthorList(SysUserOrderAuthor sysUserOrderAuthor);
+
+    /**
+     * 新增权限
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 结果
+     */
+    public int insertSysUserOrderAuthor(SysUserOrderAuthor sysUserOrderAuthor);
+
+    /**
+     * 修改权限
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 结果
+     */
+    public int updateSysUserOrderAuthor(SysUserOrderAuthor sysUserOrderAuthor);
+
+    /**
+     * 批量删除权限
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSysUserOrderAuthorByIds(String ids);
+
+    /**
+     * 删除权限信息
+     * 
+     * @param authorId 权限ID
+     * @return 结果
+     */
+    public int deleteSysUserOrderAuthorById(Long authorId);
+
+    public int insertRel(SysUserAuthorRel role);
+
+    /**
+     * 查询权限树列表
+     * 
+     * @return 所有权限信息
+     */
+    public List<Ztree> selectSysUserOrderAuthorTree();
+
+    /**
+     * 查询用户权限
+     * @param userId
+     * @return
+     */
+    public List<Ztree> userAuthorTreeData(Long userId);
+}

+ 95 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserAuthorRelServiceImpl.java

@@ -0,0 +1,95 @@
+package com.dgtly.system.service.impl;
+
+import java.util.List;
+
+import com.dgtly.system.mapper.SysUserAuthorRelMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dgtly.system.domain.SysUserAuthorRel;
+import com.dgtly.system.service.ISysUserAuthorRelService;
+import com.dgtly.common.core.text.Convert;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ * 
+ * @author dgtly
+ * @date 2022-03-23
+ */
+@Service
+public class SysUserAuthorRelServiceImpl implements ISysUserAuthorRelService 
+{
+    @Autowired
+    private SysUserAuthorRelMapper sysUserAuthorRelMapper;
+
+    /**
+     * 查询【请填写功能名称】
+     * 
+     * @param userId 【请填写功能名称】ID
+     * @return 【请填写功能名称】
+     */
+    @Override
+    public SysUserAuthorRel selectSysUserAuthorRelById(Long userId)
+    {
+        return sysUserAuthorRelMapper.selectSysUserAuthorRelById(userId);
+    }
+
+    /**
+     * 查询【请填写功能名称】列表
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 【请填写功能名称】
+     */
+    @Override
+    public List<SysUserAuthorRel> selectSysUserAuthorRelList(SysUserAuthorRel sysUserAuthorRel)
+    {
+        return sysUserAuthorRelMapper.selectSysUserAuthorRelList(sysUserAuthorRel);
+    }
+
+    /**
+     * 新增【请填写功能名称】
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 结果
+     */
+    @Override
+    public int insertSysUserAuthorRel(SysUserAuthorRel sysUserAuthorRel)
+    {
+        return sysUserAuthorRelMapper.insertSysUserAuthorRel(sysUserAuthorRel);
+    }
+
+    /**
+     * 修改【请填写功能名称】
+     * 
+     * @param sysUserAuthorRel 【请填写功能名称】
+     * @return 结果
+     */
+    @Override
+    public int updateSysUserAuthorRel(SysUserAuthorRel sysUserAuthorRel)
+    {
+        return sysUserAuthorRelMapper.updateSysUserAuthorRel(sysUserAuthorRel);
+    }
+
+    /**
+     * 删除【请填写功能名称】对象
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSysUserAuthorRelByIds(String ids)
+    {
+        return sysUserAuthorRelMapper.deleteSysUserAuthorRelByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除【请填写功能名称】信息
+     * 
+     * @param userId 【请填写功能名称】ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSysUserAuthorRelById(Long userId)
+    {
+        return sysUserAuthorRelMapper.deleteSysUserAuthorRelById(userId);
+    }
+}

+ 205 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserOrderAuthorServiceImpl.java

@@ -0,0 +1,205 @@
+package com.dgtly.system.service.impl;
+
+import java.util.List;
+import java.util.ArrayList;
+import com.dgtly.common.core.domain.Ztree;
+import com.dgtly.common.utils.DateUtils;
+import com.dgtly.common.utils.StringUtils;
+import com.dgtly.system.domain.*;
+import com.dgtly.system.mapper.SysUserAuthorRelMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dgtly.system.mapper.SysUserOrderAuthorMapper;
+import com.dgtly.system.service.ISysUserOrderAuthorService;
+import com.dgtly.common.core.text.Convert;
+
+/**
+ * 权限Service业务层处理
+ * 
+ * @author dgtly
+ * @date 2022-03-22
+ */
+@Service
+public class SysUserOrderAuthorServiceImpl implements ISysUserOrderAuthorService 
+{
+    @Autowired
+    private SysUserOrderAuthorMapper sysUserOrderAuthorMapper;
+
+    @Autowired
+    private SysUserAuthorRelMapper userAuthorRelMapper;
+
+    /**
+     * 查询权限
+     * 
+     * @param authorId 权限ID
+     * @return 权限
+     */
+    @Override
+    public SysUserOrderAuthor selectSysUserOrderAuthorById(Long authorId)
+    {
+        return sysUserOrderAuthorMapper.selectSysUserOrderAuthorById(authorId);
+    }
+
+    /**
+     * 查询权限列表
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 权限
+     */
+    @Override
+    public List<SysUserOrderAuthor> selectSysUserOrderAuthorList(SysUserOrderAuthor sysUserOrderAuthor)
+    {
+        return sysUserOrderAuthorMapper.selectSysUserOrderAuthorList(sysUserOrderAuthor);
+    }
+
+    /**
+     * 新增权限
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 结果
+     */
+    @Override
+    public int insertSysUserOrderAuthor(SysUserOrderAuthor sysUserOrderAuthor)
+    {
+        sysUserOrderAuthor.setCreateTime(DateUtils.getNowDate());
+        return sysUserOrderAuthorMapper.insertSysUserOrderAuthor(sysUserOrderAuthor);
+    }
+
+    /**
+     * 修改权限
+     * 
+     * @param sysUserOrderAuthor 权限
+     * @return 结果
+     */
+    @Override
+    public int updateSysUserOrderAuthor(SysUserOrderAuthor sysUserOrderAuthor)
+    {
+        sysUserOrderAuthor.setUpdateTime(DateUtils.getNowDate());
+        return sysUserOrderAuthorMapper.updateSysUserOrderAuthor(sysUserOrderAuthor);
+    }
+
+    /**
+     * 删除权限对象
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSysUserOrderAuthorByIds(String ids)
+    {
+        return sysUserOrderAuthorMapper.deleteSysUserOrderAuthorByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除权限信息
+     * 
+     * @param authorId 权限ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSysUserOrderAuthorById(Long authorId)
+    {
+        return sysUserOrderAuthorMapper.deleteSysUserOrderAuthorById(authorId);
+    }
+
+    public int insertRel(SysUserAuthorRel role)
+    {
+        userAuthorRelMapper.deleteSysUserAuthorRelById(role.getUserId());
+        int rows = 1;
+        // 新增角色与部门(数据权限)管理
+        List<SysUserAuthorRel> list = new ArrayList<SysUserAuthorRel>();
+        for (Long authorId : role.getAuthorIds())
+        {
+            SysUserAuthorRel rd = new SysUserAuthorRel();
+            rd.setUserId(role.getUserId());
+            rd.setAuthorId(authorId);
+            list.add(rd);
+        }
+        if (list.size() > 0)
+        {
+            rows = userAuthorRelMapper.batchRel(list);
+        }
+        return rows;
+    }
+
+    /**
+     * 查询权限树列表
+     * 
+     * @return 所有权限信息
+     */
+    @Override
+    public List<Ztree> selectSysUserOrderAuthorTree()
+    {
+        List<SysUserOrderAuthor> sysUserOrderAuthorList = sysUserOrderAuthorMapper.selectSysUserOrderAuthorList(new SysUserOrderAuthor());
+        List<Ztree> ztrees = new ArrayList<Ztree>();
+        for (SysUserOrderAuthor sysUserOrderAuthor : sysUserOrderAuthorList)
+        {
+            Ztree ztree = new Ztree();
+            ztree.setId(sysUserOrderAuthor.getAuthorId());
+            ztree.setpId(sysUserOrderAuthor.getParentId());
+            ztree.setName(sysUserOrderAuthor.getAuthorName());
+            ztree.setTitle(sysUserOrderAuthor.getAuthorName());
+            ztrees.add(ztree);
+        }
+        return ztrees;
+    }
+
+    public List<Ztree> userAuthorTreeData(Long userId) {
+        List<Ztree> ztrees = new ArrayList<Ztree>();
+        List<SysUserOrderAuthor> menuList = sysUserOrderAuthorMapper.selectSysUserOrderAuthorList(new SysUserOrderAuthor());
+        List<Long> user = sysUserOrderAuthorMapper.selectAuthorTree(userId);
+        ztrees = initTree(menuList, user);
+
+        getAuthorByLevel();//todo
+        return ztrees;
+    }
+
+    /**
+     * 对象转树
+     * @param sysUserOrderAuthorList
+     * @return
+     */
+    public List<Ztree> initTree(List<SysUserOrderAuthor> sysUserOrderAuthorList, List<Long> roleMenuList)
+    {
+        List<Ztree> ztrees = new ArrayList<Ztree>();
+        boolean isCheck = StringUtils.isNotNull(roleMenuList);
+        for (SysUserOrderAuthor menu : sysUserOrderAuthorList)
+        {
+            Ztree ztree = new Ztree();
+            ztree.setId(menu.getAuthorId());
+            ztree.setpId(menu.getParentId());
+            ztree.setName(menu.getAuthorName());
+            ztree.setTitle(menu.getAuthorName());
+            if (isCheck)
+            {
+                ztree.setChecked(roleMenuList.contains(menu.getAuthorId()));
+            }
+            ztree.setOpen(true);
+            ztrees.add(ztree);
+        }
+        return ztrees;
+    }
+
+    public void userAuthorTask(){
+
+    }
+
+    public void getAuthorByLevel(){
+        List<SysUserOrderAuthor> list = sysUserOrderAuthorMapper.selectSysUserOrderAuthorList(new SysUserOrderAuthor());
+        List<Long> ids = new ArrayList<>();
+        getParentAuthor(ids, list, 8l);
+        System.out.println(ids);
+    }
+
+    public void getParentAuthor(List<Long> ids, List<SysUserOrderAuthor> list, Long id){
+        for (SysUserOrderAuthor sysUserOrderAuthor : list) {
+            Long itemId = sysUserOrderAuthor.getAuthorId();
+            if(itemId.equals(0l)){
+                ids.add(itemId);
+            }else if(itemId.equals(id)){
+                ids.add(itemId);
+                getParentAuthor(ids, list , sysUserOrderAuthor.getParentId());
+            }
+        }
+    }
+}

+ 65 - 0
suishenbang-system/src/main/resources/mapper/system/SysUserAuthorRelMapper.xml

@@ -0,0 +1,65 @@
+<?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.dgtly.system.mapper.SysUserAuthorRelMapper">
+    
+    <resultMap type="SysUserAuthorRel" id="SysUserAuthorRelResult">
+        <result property="userId"    column="user_id"    />
+        <result property="authorId"    column="author_id"    />
+    </resultMap>
+
+    <sql id="selectSysUserAuthorRelVo">
+        select user_id, author_id from sys_user_author_rel
+    </sql>
+
+    <select id="selectSysUserAuthorRelList" parameterType="SysUserAuthorRel" resultMap="SysUserAuthorRelResult">
+        <include refid="selectSysUserAuthorRelVo"/>
+        <where>  
+            <if test="authorId != null "> and author_id = #{authorId}</if>
+        </where>
+    </select>
+    
+    <select id="selectSysUserAuthorRelById" parameterType="Long" resultMap="SysUserAuthorRelResult">
+        <include refid="selectSysUserAuthorRelVo"/>
+        where user_id = #{userId}
+    </select>
+        
+    <insert id="insertSysUserAuthorRel" parameterType="SysUserAuthorRel">
+        insert into sys_user_author_rel
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="userId != null ">user_id,</if>
+            <if test="authorId != null ">author_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="userId != null ">#{userId},</if>
+            <if test="authorId != null ">#{authorId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSysUserAuthorRel" parameterType="SysUserAuthorRel">
+        update sys_user_author_rel
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="authorId != null ">author_id = #{authorId},</if>
+        </trim>
+        where user_id = #{userId}
+    </update>
+
+    <delete id="deleteSysUserAuthorRelById" parameterType="Long">
+        delete from sys_user_author_rel where user_id = #{userId}
+    </delete>
+
+    <delete id="deleteSysUserAuthorRelByIds" parameterType="String">
+        delete from sys_user_author_rel where user_id in 
+        <foreach item="userId" collection="array" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </delete>
+
+    <insert id="batchRel">
+        insert into sys_user_author_rel(user_id, author_id) values
+        <foreach item="item" index="index" collection="list" separator=",">
+            (#{item.userId},#{item.authorId})
+        </foreach>
+    </insert>
+</mapper>

+ 109 - 0
suishenbang-system/src/main/resources/mapper/system/SysUserOrderAuthorMapper.xml

@@ -0,0 +1,109 @@
+<?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.dgtly.system.mapper.SysUserOrderAuthorMapper">
+    
+    <resultMap type="SysUserOrderAuthor" id="SysUserOrderAuthorResult">
+        <result property="authorId"    column="author_id"    />
+        <result property="authorName"    column="author_name"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="code"    column="code"    />
+        <result property="orderNum"    column="order_num"    />
+        <result property="authorType"    column="author_type"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="parentName" column="parent_name" />
+    </resultMap>
+
+    <sql id="selectSysUserOrderAuthorVo">
+        select author_id, author_name, parent_id, code, order_num, author_type, create_by, create_time, update_by, update_time, remark from sys_user_order_author
+    </sql>
+
+    <select id="selectSysUserOrderAuthorList" parameterType="SysUserOrderAuthor" resultMap="SysUserOrderAuthorResult">
+        <include refid="selectSysUserOrderAuthorVo"/>
+        <where>  
+            <if test="authorName != null  and authorName != ''"> and author_name like concat('%', #{authorName}, '%')</if>
+            <if test="parentId != null "> and parent_id = #{parentId}</if>
+            <if test="code != null  and code != ''"> and code = #{code}</if>
+            <if test="orderNum != null "> and order_num = #{orderNum}</if>
+            <if test="authorType != null  and authorType != ''"> and author_type = #{authorType}</if>
+        </where>
+        order by parent_id
+    </select>
+
+    <select id="selectAuthorTree" parameterType="Long" resultType="Long">
+		select m.author_id
+		from sys_user_order_author m
+			left join sys_user_author_rel rm on m.author_id = rm.author_id
+		where rm.user_id = #{userId}
+		order by m.parent_id, m.order_num
+	</select>
+
+    <select id="selectSysUserOrderAuthorById" parameterType="Long" resultMap="SysUserOrderAuthorResult">
+        select t.author_id, t.author_name, t.parent_id, t.code, t.order_num, t.author_type, t.create_by, t.create_time, t.update_by, t.update_time, t.remark, p.author_name as parent_name
+        from sys_user_order_author t
+        left join sys_user_order_author p on p.author_id = t.parent_id
+        where t.author_id = #{authorId}
+    </select>
+        
+    <insert id="insertSysUserOrderAuthor" parameterType="SysUserOrderAuthor" useGeneratedKeys="true" keyProperty="authorId">
+        insert into sys_user_order_author
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="authorName != null  and authorName != ''">author_name,</if>
+            <if test="parentId != null ">parent_id,</if>
+            <if test="code != null  and code != ''">code,</if>
+            <if test="orderNum != null ">order_num,</if>
+            <if test="authorType != null  and authorType != ''">author_type,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="authorName != null  and authorName != ''">#{authorName},</if>
+            <if test="parentId != null ">#{parentId},</if>
+            <if test="code != null  and code != ''">#{code},</if>
+            <if test="orderNum != null ">#{orderNum},</if>
+            <if test="authorType != null  and authorType != ''">#{authorType},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSysUserOrderAuthor" parameterType="SysUserOrderAuthor">
+        update sys_user_order_author
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="authorName != null  and authorName != ''">author_name = #{authorName},</if>
+            <if test="parentId != null ">parent_id = #{parentId},</if>
+            <if test="code != null  and code != ''">code = #{code},</if>
+            <if test="orderNum != null ">order_num = #{orderNum},</if>
+            <if test="authorType != null  and authorType != ''">author_type = #{authorType},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+        </trim>
+        where author_id = #{authorId}
+    </update>
+
+    <delete id="deleteSysUserOrderAuthorById" parameterType="Long">
+        delete from sys_user_order_author where author_id = #{authorId}
+    </delete>
+
+    <delete id="deleteSysUserOrderAuthorByIds" parameterType="String">
+        delete from sys_user_order_author where author_id in 
+        <foreach item="authorId" collection="array" open="(" separator="," close=")">
+            #{authorId}
+        </foreach>
+    </delete>
+    
+</mapper>

+ 102 - 0
suishenbang-wxportal/suishenbang-wxportal-api/src/main/java/com/dgtly/wxportal/controller/EsignController.java

@@ -1,5 +1,6 @@
 package com.dgtly.wxportal.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.dgtly.common.annotation.ApiPassToken;
 import com.dgtly.common.config.ServerConfig;
 import com.dgtly.common.core.controller.ApiBaseController;
@@ -162,8 +163,88 @@ public class EsignController extends ApiBaseController {
         }
     }
 
+    /**
+     * 指派司机授权
+     */
+    @ApiOperation(value = "指派司机授权", notes = "参数:{}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "params", paramType = "body")
+    })
+    @PostMapping("dealerSignDriver")
+    public Object dealerSignDriver() {
+
+        ParameterObject obj = getParameterObject();
+        obj.checkParameterNotNull("orderId,userId,deliveryNumber,tmsShipmentNumber,customerCode,redirectUrl");
+        String orderId = obj.getString("orderId");
+        String tmsShipNumber = obj.getString("tmsShipmentNumber");
+        String customerCode = obj.getString("customerCode");
+        String userId = obj.getString("userId");
+        String deliveryNumber = obj.getString("deliveryNumber");
+//        String shipmentNumber = obj.getString("shipmentNumber");
+//        String belongTo = obj.getString("belongTo");
+        String wareHouseCode = obj.getString("wareHouseCode");
+        String wareHouseName = obj.getString("wareHouseName");
+        String redirectUrl = obj.getString("redirectUrl");
+        logger.info("签署完成跳转地址:{}",redirectUrl);
 
 
+        String businessScene = "司机授权";
+        //String fileName = orderId+"_签收订单.pdf";
+        String fileName = tmsShipNumber+"_司机授权.pdf";
+        /*根据userId查询个人注册后accountId*/
+        String signerAccountId = "";
+        try {
+            SysUser sysUser = userService.selectUserById(Long.parseLong(userId));
+            if (sysUser!=null){
+                signerAccountId=sysUser.getAccountId();
+            }
+            /*根据订单id关联查询企业注册后id*/
+//            String authorizedAccountId =customersExtService.selectOrgIdByOrderId(orderId);
+            String authorizedAccountId = "563c540b67354026a5f84f6c5b9d8eb0";
+//            signService.signAuth(authorizedAccountId);
+            logger.info("签署人认证id:{}",authorizedAccountId);
+            /* 根据订单id关联查询企业代号*/
+//        String chainsCode = customersExtService.selectChainsCodeByOrderId(orderId);
+            /*首先根据订单id-orderId查询订单是否已被签署*/
+//        OrderFile orderFlag = orderFileService.selectOrderFileById(orderId);
+            ESignUpPDFModal fileModal = eSignService.uploadDriver(orderId,tmsShipNumber,customerCode,sysUser.getSysUserExt().getOrgName(),sysUser.getUserName());
+            /*1、根据传入订单id,查询订单相关信息生成PDF,调用e签宝上传方法返回文件fileId*/
+            Object fileId = fileModal.getFileId();
+            logger.info("签署订单返回文件id:{}",fileId);
+            /*2、调用E签宝接口一步发起流程,得到返回的流程id*/
+            String flowId = signService.oneStepFlow(businessScene, fileId.toString(),fileModal.getX(),fileModal.getY(), fileName, signerAccountId, authorizedAccountId,redirectUrl);
+            logger.info("签署订单一步发起完成流程id:{}",flowId);
+            /*3、调用E签宝获取签署地址*/
+//            String result = signService.processExecuteUrl(flowId, signerAccountId, authorizedAccountId);
+            /*4、保存订单id和flowId*/
+            OrderFile orderFile = new OrderFile();
+            orderFile.setOrderId(orderId);
+            orderFile.setDeliveryNumber(deliveryNumber);
+            orderFile.setShipmentNumber(tmsShipNumber);
+            orderFile.setWareHouseCode(wareHouseCode);
+            orderFile.setWareHouseName(wareHouseName);
+            orderFile.setChainsCode(customerCode);
+            orderFile.setCustomersCode(authorizedAccountId);
+            orderFile.setSignerId(signerAccountId);
+            orderFile.setSignerName(sysUser.getUserName());
+            orderFile.setFlowId(flowId);
+            orderFileService.insertOrderFile(orderFile);
+            logger.info("保存签署订单附件");
+            try{
+                File f = new File(fileModal.getFilePath());
+                f.delete();
+            }catch (Exception e){
+                logger.error("删除文件出错:",e);
+            }
+            logger.info("签署订单完成");
+            return AjaxResult.success("签收成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error("签署订单失败:{}",e.getMessage());
+            return AjaxResult.error("签收失败");
+        }
+    }
+
     /**
      * 经销商通过签署地址签署后,回调此方法,通过flowId得到签署后的文件下载地址并保存url
      */
@@ -621,4 +702,25 @@ public class EsignController extends ApiBaseController {
 //        return toAjax(eSignService.updateThirdParty(customersExt));
 //    }
 
+    @ApiOperation(value = "企业认证删除",
+            notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "params", paramType = "body")
+    })
+    @ApiPassToken
+    @PostMapping("/delOrganizations")
+    public Object delOrganizations() {
+        ParameterObject obj = getParameterObject();
+        String chainsCode = obj.getString("chainsCode");
+        CustomersExt customersExt = customersExtService.selectCustomersExtById(chainsCode);
+        if(customersExt == null ){
+            return AjaxResult.error("chainsCode error ");
+        }
+        JSONObject result = eSignService.delOrganizations(customersExt.getOrgId());
+        if (result.getInteger("code") == 0) {
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.error(result.getString("message"));
+        }
+    }
 }

+ 9 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/service/ESignService.java

@@ -1,5 +1,6 @@
 package com.dgtly.wxportal.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.dgtly.system.domain.CustomersExt;
 import com.dgtly.system.domain.SysUser;
 import com.dgtly.wxportal.domain.ESignUpPDFModal;
@@ -27,6 +28,8 @@ public interface ESignService {
    */
   ESignUpPDFModal upload(String orderId,String tmsShipNumber,String customerCode, String customerName,String userName);
 
+  ESignUpPDFModal uploadDriver(String orderId,String tmsShipNumber,String customerCode, String customerName,String userName);
+
 
      String verificationUser();
 
@@ -82,4 +85,10 @@ public interface ESignService {
      * @date: 2020/11/27 14:31
      */
     String getOrgIdByThirdId(String chainsCode);
+
+    /**
+     * @descption: 企业认证删除
+     *
+     */
+    JSONObject delOrganizations (String orgId);
 }

+ 87 - 1
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/service/impl/ESignServiceImpl.java

@@ -78,6 +78,28 @@ public class ESignServiceImpl implements ESignService {
         return fileModal;
     }
 
+    @Override
+    public ESignUpPDFModal uploadDriver(String orderId,String tmsShipNumber,String customerCode,String customerName,String userName) {
+
+        EReceivingNote receivingNote = iMetaHanaSalesOrderService.selectEReceivingNote(orderId,tmsShipNumber,customerCode,customerName,userName);
+        Map<String,Object> map = new HashMap<>();
+        //创建PDF
+        ESignUpPDFModal fileModal = creatDriverPdf(receivingNote);
+        String md5 = ESignUploadUtil.getStringContentMD5(fileModal.getFilePath());
+        String contentTtpe = "application/pdf";
+        int fileLength = ESignUploadUtil.getFileSize(fileModal.getFilePath());
+        //根据文件获取上传路径
+        JSONObject urlData =  getUpUrl(fileModal.getFilePath(),md5,contentTtpe,fileLength).getJSONObject("data");
+        //文件id
+        String fileId = urlData.getString("fileId");
+        //文件上传路径
+        String uploadUrl = urlData.getString("uploadUrl");
+        //上传文件
+        String res = eSignHttpUtil.upLoadFile(uploadUrl,fileModal.getFilePath(),md5,contentTtpe,fileLength);
+        fileModal.setFileId(fileId);
+        return fileModal;
+    }
+
     @Override
     public String verificationUser() {
         return null;
@@ -188,6 +210,12 @@ public class ESignServiceImpl implements ESignService {
         }
     }
 
+    @Override
+    public JSONObject delOrganizations(String orgId) {
+        String url = eSignConfig.getUrl(ESignUrl.delOrgUrl, orgId);
+        return JSONObject.parseObject(eSignHttpUtil.doDelete(url, new JSONObject().toJSONString()));
+    }
+
     /**
      * @description: 根据loginName查询E签宝是否存在
      * @param: [loginName]
@@ -244,7 +272,7 @@ public class ESignServiceImpl implements ESignService {
             document.addCreator("");// 创建者
 
             // 4.向文档中添加内容
-            size = PDFUtil.generateEPDF(document,receivingNote);
+            size = PDFUtil.generateEPDF(document,receivingNote, true);
             writer.flush();
             // 5.关闭文档
             document.close();
@@ -263,6 +291,64 @@ public class ESignServiceImpl implements ESignService {
         res.setFilePath(fileUrl);
         return res;
     }
+
+    /**
+     * 创建指派司机pdf文件
+     * @param
+     * @return
+     */
+    private ESignUpPDFModal creatDriverPdf(EReceivingNote receivingNote){
+        ESignUpPDFModal res = new ESignUpPDFModal();
+        String fileUrl = "";
+        int size = 0;
+        try {
+            // 1.新建document对象
+            Document document = new Document(PageSize.A4);// 建立一个Document对象
+
+            // 2.建立一个书写器(Writer)与document对象关联
+            String uploadPath = eSignConfig.getFileUrl() ;
+            String filePath = uploadPath+File.separator+new Date().getTime()+"PDFDemo.pdf";
+            File file = new File(filePath);
+            if (!file.getParentFile().exists())
+            {
+                file.getParentFile().mkdirs();
+            }
+            fileUrl = filePath;
+            file.createNewFile();
+
+            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
+//            writer.setPageEvent(new Watermark("我是水印"));// 水印
+//                writer.setPageEvent(new MyHeaderFooter());// 页眉/页脚
+
+            // 3.打开文档
+            document.open();
+            document.addTitle("随  身  邦  授  权  司  机  货  单");// 标题
+            document.addAuthor("");// 作者
+            document.addSubject("");// 主题
+            document.addKeywords("");// 关键字
+            document.addCreator("");// 创建者
+
+            // 4.向文档中添加内容
+            size = PDFUtil.generateEPDF(document,receivingNote, false);
+            writer.flush();
+            // 5.关闭文档
+            document.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("生成PDF出错:",e);
+        }
+        //计算宽高
+        Float fosX = 500F;
+        Float fosY = 700F;
+//        for (int i =0;i<size;i++){
+//           fosY = fosY-11f;
+//        }
+        res.setX(fosX);
+        res.setY(fosY);
+        res.setFilePath(fileUrl);
+        return res;
+    }
+
     /**
      * 获取文件上传路径
      * @param filePath

+ 92 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/ESign/ESignHttpUtil.java

@@ -290,6 +290,98 @@ public class ESignHttpUtil {
         return result.toString();
     }
 
+    public String doDelete(String url , String json)
+    {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+
+            log.info("sendPost - {}", url);
+            // 打开和URL之间的连接
+            SSLContext sc = SSLContext.getInstance("SSL");
+            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new SecureRandom());
+            // 从上述SSLContext对象中得到SSLSocketFactory对象
+            SSLSocketFactory ssf = sc.getSocketFactory();
+
+            java.net.URL realUrl = new URL(url);
+
+            HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
+
+            conn.setSSLSocketFactory(ssf);
+            conn.setRequestMethod("DELETE");
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("X-Tsign-Open-App-Id",eSignConfig.getAppId());
+            conn.setRequestProperty("X-Tsign-Open-Token",eSignConfig.getAccessToken());
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+            conn.setUseCaches(false);//设置不要缓存
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            String line;
+            try{
+                out = new PrintWriter(conn.getOutputStream());
+                out.write(json);
+                out.flush();
+                in = new BufferedReader( new InputStreamReader(conn.getInputStream()));
+
+                while ((line = in.readLine()) != null)
+                {
+                    result.append(line);
+                }
+            } catch (IOException e){
+                if(conn.getResponseCode()==401){
+                    log.error("请求E签宝接口报错401,token超时");
+                    eSignConfig.reSetToken();
+                }
+                throw e;
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用ESignHttpUtil.doPost ConnectException, url=" + url + ",param_body=" + json, e);
+            throw new BusinessException("调用ESignHttpUtil.sendJsonPost ConnectException, url=" + url + ",param=" + json );
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用ESignHttpUtil.doPost SocketTimeoutException, url=" + url + ",param=" + json, e);
+            throw new BusinessException("调用ESignHttpUtil.sendJsonPost SocketTimeoutException, url=" + url + ",param=" + json );
+        }
+        catch (IOException e)
+        {
+            log.error("调用ESignHttpUtil.doPost IOException, url=" + url + ",param=" + json, e);
+
+            throw new BusinessException("调用ESignHttpUtil.sendJsonPost IOException, url=" + url + ",param=" + json );
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.doPost Exception, url=" + url + ",param=" + json, e);
+            throw new BusinessException("调用ESignHttpUtil.sendJsonPost Exception, url=" + url + ",param=" + json );
+        }
+        finally
+        {
+
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + json, ex);
+            }
+        }
+        return result.toString();
+    }
+
     private String doGet(String url, String json)
     {
         PrintWriter out = null;

+ 1 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/ESign/ESignUrl.java

@@ -52,6 +52,7 @@ public enum ESignUrl {
     ,updateThirdParty("/v1/organizations/%s")
     //设置静默签署
     ,signAuthUrl("/v1/signAuth/%s")
+    ,delOrgUrl("/v1/organizations/%s")
     ;
     public String url;
 

+ 7 - 2
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/pdf/PDFUtil.java

@@ -226,9 +226,14 @@ public class PDFUtil {
 
 
 
-    public  static int generateEPDF(Document document,EReceivingNote receivingNote) throws Exception {
+    public  static int generateEPDF(Document document,EReceivingNote receivingNote, boolean flag) throws Exception {
         // 段落
-        Paragraph paragraph = new Paragraph("立    邦   随   身  邦  收  货  单", titlefont);
+        Paragraph paragraph;
+        if (flag) {
+            paragraph = new Paragraph("立    邦   随   身  邦  收  货  单", titlefont);
+        } else {
+            paragraph = new Paragraph("立    邦   随   身  邦  授  权  单", titlefont);
+        }
         paragraph.setAlignment(1); //设置文字居中 0靠左   1,居中     2,靠右
         paragraph.setIndentationLeft(12); //设置左缩进
         paragraph.setIndentationRight(12); //设置右缩进