Browse Source

Merge remote-tracking branch 'origin/master'

ningsy 4 years ago
parent
commit
cb02e71a57
48 changed files with 2917 additions and 32 deletions
  1. 6 0
      pom.xml
  2. 0 3
      sql/suishenbang-oneportal.sql
  3. 6 0
      suishenbang-admin/pom.xml
  4. 1 5
      suishenbang-admin/src/main/java/com/dgtly/web/controller/system/SysDeptController.java
  5. 1 1
      suishenbang-admin/src/main/java/com/dgtly/web/controller/system/SysIndexController.java
  6. 4 4
      suishenbang-admin/src/main/resources/application-dev-druid.yml
  7. 1 1
      suishenbang-admin/src/main/resources/templates/system/user/add.html
  8. 0 12
      suishenbang-quartz/src/main/java/com/dgtly/quartz/task/SynchronizationTask.java
  9. 30 0
      suishenbang-sync/pom.xml
  10. 32 0
      suishenbang-sync/src/main/java/com/dgtly/sync/config/ThreadConfig.java
  11. 79 0
      suishenbang-sync/src/main/java/com/dgtly/sync/controller/SyncController.java
  12. 104 0
      suishenbang-sync/src/main/java/com/dgtly/sync/controller/SyncLogController.java
  13. 102 0
      suishenbang-sync/src/main/java/com/dgtly/sync/domain/MetaNipponOrgRelation.java
  14. 311 0
      suishenbang-sync/src/main/java/com/dgtly/sync/domain/MetaUserinfoAll.java
  15. 66 0
      suishenbang-sync/src/main/java/com/dgtly/sync/domain/SyncFailDetail.java
  16. 151 0
      suishenbang-sync/src/main/java/com/dgtly/sync/domain/SyncLog.java
  17. 40 0
      suishenbang-sync/src/main/java/com/dgtly/sync/exception/EndLessLoopParentException.java
  18. 39 0
      suishenbang-sync/src/main/java/com/dgtly/sync/exception/NotFoundParentException.java
  19. 62 0
      suishenbang-sync/src/main/java/com/dgtly/sync/mapper/MetaNipponOrgRelationMapper.java
  20. 61 0
      suishenbang-sync/src/main/java/com/dgtly/sync/mapper/MetaUserinfoAllMapper.java
  21. 71 0
      suishenbang-sync/src/main/java/com/dgtly/sync/mapper/SyncFailDetailMapper.java
  22. 61 0
      suishenbang-sync/src/main/java/com/dgtly/sync/mapper/SyncLogMapper.java
  23. 15 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/IAnalysisDeptService.java
  24. 13 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/IAnalysisSysUserService.java
  25. 63 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/IMetaNipponOrgRelationService.java
  26. 61 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/IMetaUserinfoAllService.java
  27. 70 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/ISyncFailDetailService.java
  28. 41 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/ISyncLogService.java
  29. 188 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/AnalysisDeptService.java
  30. 149 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/AnalysisSysUserService.java
  31. 95 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/MetaNipponOrgRelationServiceImpl.java
  32. 94 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/MetaUserinfoAllServiceImpl.java
  33. 102 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/SyncFailDetailServiceImpl.java
  34. 62 0
      suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/SyncLogServiceImpl.java
  35. 80 0
      suishenbang-sync/src/main/resources/mapper/sync/MetaNipponOrgRelationMapper.xml
  36. 160 0
      suishenbang-sync/src/main/resources/mapper/sync/MetaUserinfoAllMapper.xml
  37. 77 0
      suishenbang-sync/src/main/resources/mapper/sync/SyncFailDetailMapper.xml
  38. 83 0
      suishenbang-sync/src/main/resources/mapper/sync/SyncLogMapper.xml
  39. 26 0
      suishenbang-sync/src/main/resources/templates/sync/synclog/edit.html
  40. 103 0
      suishenbang-sync/src/main/resources/templates/sync/synclog/syncfaildetail.html
  41. 96 0
      suishenbang-sync/src/main/resources/templates/sync/synclog/synclog.html
  42. 11 0
      suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserMapper.java
  43. 30 1
      suishenbang-system/src/main/java/com/dgtly/system/service/ISysDeptService.java
  44. 10 0
      suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserService.java
  45. 39 0
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysDeptServiceImpl.java
  46. 14 0
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserServiceImpl.java
  47. 5 0
      suishenbang-system/src/main/resources/mapper/system/SysUserMapper.xml
  48. 2 5
      suishenbang-wxportal/suishenbang-wxportal-manager/pom.xml

+ 6 - 0
pom.xml

@@ -233,6 +233,11 @@
                 <artifactId>suishenbang-order</artifactId>
                 <version>${dgtly.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.dgtly</groupId>
+                <artifactId>suishenbang-sync</artifactId>
+                <version>${dgtly.version}</version>
+            </dependency>
 
 
         </dependencies>
@@ -249,6 +254,7 @@
         <module>suishenbang-api</module>
         <module>suishenbang-wxportal</module>
         <module>suishenbang-order</module>
+        <module>suishenbang-sync</module>
     </modules>
     <packaging>pom</packaging>
 

+ 0 - 3
sql/suishenbang-oneportal.sql

@@ -342,9 +342,6 @@ CREATE TABLE `sys_config`  (
 INSERT INTO `sys_config` VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', '1', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow');
 INSERT INTO `sys_config` VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', '1', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '初始化密码 123456');
 INSERT INTO `sys_config` VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', '1', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '深色主题theme-dark,浅色主题theme-light');
-INSERT INTO `sys_config` VALUES (4, '公司管理员角色ID', 'company.manager.roleId', '110', 'Y', 'admin', '2020-02-19 11:46:57', '', NULL, NULL);
-INSERT INTO `sys_config` VALUES (5, '系统公司id', 'sys.company.id', '1', 'Y', 'admin', '2020-02-26 15:40:30', 'admin', '2020-02-26 16:14:44', '');
-INSERT INTO `sys_config` VALUES (6, '新建公司创建的部门所属父部门id', 'sys.dept.parentId', '100', 'Y', 'admin', '2020-02-26 16:14:32', '', NULL, '新建公司所属部门父部门Id');
 
 -- ----------------------------
 -- Table structure for sys_dept

+ 6 - 0
suishenbang-admin/pom.xml

@@ -92,6 +92,12 @@
             <artifactId>suishenbang-order</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.dgtly</groupId>
+            <artifactId>suishenbang-sync</artifactId>
+            <version>4.0.0</version>
+        </dependency>
+
 
 
     </dependencies>

+ 1 - 5
suishenbang-admin/src/main/java/com/dgtly/web/controller/system/SysDeptController.java

@@ -196,11 +196,7 @@ public class SysDeptController extends BaseController
         SysRole role = new SysRole();
         role.setRoleId(user.getRoleId());
         ztrees= deptService.roleDeptTreeData(role);
-        /*if(ShiroUtils.getCompanyId()==Long.parseLong(configService.selectConfigByKey("sys.company.id"))){
-            ztrees= deptService.selectDeptTree(dept);
-        }else{
-            ztrees= deptService.roleDeptTreeData(role);
-        }*/
+
         return ztrees;
     }
 

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

@@ -50,7 +50,7 @@ public class SysIndexController extends BaseController
         mmap.put("user", user);
         mmap.put("copyrightYear", Global.getCopyrightYear());
         mmap.put("demoEnabled", Global.isDemoEnabled());
-        return "homeIndex";
+        return "index";
     }
     // 系统首页
     @GetMapping("/index")

+ 4 - 4
suishenbang-admin/src/main/resources/application-dev-druid.yml

@@ -17,11 +17,11 @@ spring:
                 username: 
                 password: 
             # 初始连接数
-            initialSize: 5
+            initialSize: 10
             # 最小连接池数量
-            minIdle: 10
+            minIdle: 20
             # 最大连接池数量
-            maxActive: 20
+            maxActive: 40
             # 配置获取连接等待超时的时间
             maxWait: 60000
             # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
@@ -50,7 +50,7 @@ spring:
                     enabled: true
                     # 慢SQL记录
                     log-slow-sql: true
-                    slow-sql-millis: 1000
+                    slow-sql-millis: 5000
                     merge-sql: true
                 wall:
                     config:

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

@@ -225,7 +225,7 @@
         /*用户管理-新增-选择部门树*/
         function selectDeptTree() {
         	var treeId = $("#treeId").val();
-        	var deptId = $.common.isEmpty(treeId) ? "100" : $("#treeId").val();
+        	var deptId = $.common.isEmpty(treeId) ? "99000000" : $("#treeId").val();
         	var url = ctx + "system/dept/selectDeptTree/" + deptId;
 			var options = {
 				title: '选择部门',

+ 0 - 12
suishenbang-quartz/src/main/java/com/dgtly/quartz/task/SynchronizationTask.java

@@ -1,12 +0,0 @@
-package com.dgtly.quartz.task;
-
-import org.springframework.stereotype.Component;
-
-/**
- * 同步用户或部门的定时任务
- */
-@Component("synchronizationTask")
-public class SynchronizationTask {
-
-
-}

+ 30 - 0
suishenbang-sync/pom.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>suishenbang-oneportal</artifactId>
+        <groupId>com.dgtly</groupId>
+        <version>4.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>suishenbang-sync</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.dgtly</groupId>
+            <artifactId>suishenbang-system</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.dgtly</groupId>
+            <artifactId>suishenbang-framework</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.dgtly</groupId>
+            <artifactId>suishenbang-common</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 32 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/config/ThreadConfig.java

@@ -0,0 +1,32 @@
+package com.dgtly.sync.config;
+
+import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.AsyncConfigurer;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+
+@Configuration
+@EnableAsync
+public class ThreadConfig implements AsyncConfigurer {
+
+    @Override
+    public Executor getAsyncExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(8);
+        executor.setMaxPoolSize(1000);
+        executor.setQueueCapacity(500);
+        executor.setKeepAliveSeconds(30000);
+        executor.initialize();
+        return executor;
+    }
+
+    @Override
+    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
+        return null;
+    }
+
+
+}

+ 79 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/controller/SyncController.java

@@ -0,0 +1,79 @@
+package com.dgtly.sync.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.dgtly.common.exception.BusinessException;
+import com.dgtly.sync.domain.MetaNipponOrgRelation;
+import com.dgtly.sync.domain.SyncFailDetail;
+import com.dgtly.sync.domain.SyncLog;
+import com.dgtly.sync.exception.NotFoundParentException;
+import com.dgtly.sync.service.*;
+import com.dgtly.system.domain.SysDept;
+import com.dgtly.system.service.ISysDeptService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.concurrent.*;
+
+/**
+ * 同步数据解析接口
+ * 数据调度中心在数据同步成功后会调用相应的接口通知各个模块解析相应的数据
+ * interface是框架中放行的前缀
+ *
+ * qxp
+ */
+@RestController
+@RequestMapping("/interface/sync")
+public class SyncController {
+
+
+    private static final Logger log = LoggerFactory.getLogger(SyncController.class);
+
+
+    @Autowired
+    private IAnalysisDeptService analysisDeptService;
+
+    @Autowired
+    private IAnalysisSysUserService analysisSysUserService;
+
+    /**
+     * 解析部门数据
+     * @param packageId
+     * @param jobId
+     * @param message
+     * @return
+     */
+    @GetMapping("dept")
+    public Object dept(String packageId, String jobId, String message){
+        try{
+           analysisDeptService.analysisDept(packageId);
+        }catch (Exception e){
+            log.error("解析部门出错",e);
+        }
+        return true;
+    }
+
+
+    /**
+     * 解析用户数据
+     * @param packageId
+     * @param jobId
+     * @param message
+     * @return
+     */
+    @GetMapping("user")
+    public Object user(String packageId, String jobId, String message){
+        try{
+            analysisSysUserService.analysisSysUser(packageId);
+        }catch (Exception e){
+            log.error("解析用户出错",e);
+        }
+        return true;
+    }
+
+
+
+}

+ 104 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/controller/SyncLogController.java

@@ -0,0 +1,104 @@
+package com.dgtly.sync.controller;
+
+import java.util.List;
+
+import com.dgtly.sync.domain.SyncFailDetail;
+import com.dgtly.sync.service.ISyncFailDetailService;
+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.sync.domain.SyncLog;
+import com.dgtly.sync.service.ISyncLogService;
+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.core.page.TableDataInfo;
+
+/**
+ * 同步解析日志Controller
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+@Controller
+@RequestMapping("/sync/synclog")
+public class SyncLogController extends BaseController
+{
+    private String prefix = "sync/synclog";
+
+    @Autowired
+    private ISyncLogService syncLogService;
+
+
+    @Autowired
+    private ISyncFailDetailService syncFailDetailService;
+
+    @RequiresPermissions("sync:synclog:view")
+    @GetMapping()
+    public String synclog()
+    {
+        return prefix + "/synclog";
+    }
+
+    /**
+     * 查询同步解析日志列表
+     */
+    @RequiresPermissions("sync:synclog:list")
+    @PostMapping("/list")
+    @ResponseBody
+    public TableDataInfo list(SyncLog syncLog)
+    {
+        startPage();
+        List<SyncLog> list = syncLogService.selectSyncLogList(syncLog);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出同步解析日志列表
+     */
+    @RequiresPermissions("sync:synclog:export")
+    @PostMapping("/export")
+    @ResponseBody
+    public AjaxResult export(SyncLog syncLog)
+    {
+        List<SyncLog> list = syncLogService.selectSyncLogList(syncLog);
+        ExcelUtil<SyncLog> util = new ExcelUtil<SyncLog>(SyncLog.class);
+        return util.exportExcel(list, "synclog");
+    }
+
+    /**
+     * 修改同步解析日志
+     */
+    @GetMapping("/faildetail/{packageId}")
+    public String faildetail(@PathVariable("packageId") String packageId, ModelMap mmap)
+    {
+        mmap.put("packageId", packageId);
+        return prefix + "/syncfaildetail";
+    }
+
+
+    /**
+     * 查询同步解析失败详情列表
+     */
+    @PostMapping("/faildetaillist/{packageId}")
+    @ResponseBody
+    public TableDataInfo list(@PathVariable("packageId")String packageId)
+    {
+        startPage();
+        SyncFailDetail syncFailDetail = new SyncFailDetail();
+        syncFailDetail.setPackageId(packageId);
+        List<SyncFailDetail> list = syncFailDetailService.selectSyncFailDetailList(syncFailDetail);
+        return getDataTable(list);
+    }
+
+
+
+}

+ 102 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/domain/MetaNipponOrgRelation.java

@@ -0,0 +1,102 @@
+package com.dgtly.sync.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;
+
+/**
+ *  随身邦客户部门对象 meta_nippon_org_relation
+ * 
+ * @author qxp
+ * @date 2020-07-15
+ */
+public class MetaNipponOrgRelation extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 部门id */
+    private Long objid;
+
+    /** 部门级别 */
+    private String Short;
+
+    /** 部门名称 */
+    private String stext;
+
+    /** 上级部门id */
+    private String sobid;
+
+    /**  */
+    private String lineId;
+
+    /** 包id */
+    private String packageId;
+
+    public void setObjid(Long objid) 
+    {
+        this.objid = objid;
+    }
+
+    public Long getObjid() 
+    {
+        return objid;
+    }
+    public void setShort(String Short)
+    {
+        this.Short = Short;
+    }
+
+    public String getShort() 
+    {
+        return Short;
+    }
+    public void setStext(String stext) 
+    {
+        this.stext = stext;
+    }
+
+    public String getStext() 
+    {
+        return stext;
+    }
+    public void setSobid(String sobid) 
+    {
+        this.sobid = sobid;
+    }
+
+    public String getSobid() 
+    {
+        return sobid;
+    }
+    public void setLineId(String lineId) 
+    {
+        this.lineId = lineId;
+    }
+
+    public String getLineId() 
+    {
+        return lineId;
+    }
+    public void setPackageId(String packageId) 
+    {
+        this.packageId = packageId;
+    }
+
+    public String getPackageId() 
+    {
+        return packageId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("objid", getObjid())
+            .append("short", getShort())
+            .append("stext", getStext())
+            .append("sobid", getSobid())
+            .append("lineId", getLineId())
+            .append("packageId", getPackageId())
+            .toString();
+    }
+}

+ 311 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/domain/MetaUserinfoAll.java

@@ -0,0 +1,311 @@
+package com.dgtly.sync.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;
+import java.util.Date;
+
+/**
+ * 立邦用户数据对象 meta_userinfo_all
+ * 
+ * @author qxp
+ * @date 2020-07-16
+ */
+public class MetaUserinfoAll
+{
+    private static final long serialVersionUID = 1L;
+
+    /** null */
+    private Long id;
+
+    /** null */
+    private String name;
+
+    /** null */
+    private String loginname;
+
+    /** null */
+    private String email;
+
+    /** null */
+    private String mobile;
+
+    /** null */
+    private String sapemployeeid;
+
+    /** null */
+    private Long status;
+
+    /** null */
+    private Date leavedate;
+
+    /** null */
+    private String objid1;
+
+    /** null */
+    private String stext1;
+
+    /** null */
+    private String objid2;
+
+    /** null */
+    private String stext2;
+
+    /** null */
+    private String objid3;
+
+    /** null */
+    private String stext3;
+
+    /** null */
+    private String objid4;
+
+    /** null */
+    private String stext4;
+
+    /** null */
+    private String objid5;
+
+    /** null */
+    private String stext5;
+
+    /** null */
+    private String objid6;
+
+    /** null */
+    private String poste;
+
+    /** 包id */
+    private String packageId;
+
+    /** null */
+    private String lineId;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setLoginname(String loginname) 
+    {
+        this.loginname = loginname;
+    }
+
+    public String getLoginname() 
+    {
+        return loginname;
+    }
+    public void setEmail(String email) 
+    {
+        this.email = email;
+    }
+
+    public String getEmail() 
+    {
+        return email;
+    }
+    public void setMobile(String mobile) 
+    {
+        this.mobile = mobile;
+    }
+
+    public String getMobile() 
+    {
+        return mobile;
+    }
+    public void setSapemployeeid(String sapemployeeid) 
+    {
+        this.sapemployeeid = sapemployeeid;
+    }
+
+    public String getSapemployeeid() 
+    {
+        return sapemployeeid;
+    }
+    public void setStatus(Long status) 
+    {
+        this.status = status;
+    }
+
+    public Long getStatus() 
+    {
+        return status;
+    }
+    public void setLeavedate(Date leavedate) 
+    {
+        this.leavedate = leavedate;
+    }
+
+    public Date getLeavedate() 
+    {
+        return leavedate;
+    }
+    public void setObjid1(String objid1) 
+    {
+        this.objid1 = objid1;
+    }
+
+    public String getObjid1() 
+    {
+        return objid1;
+    }
+    public void setStext1(String stext1) 
+    {
+        this.stext1 = stext1;
+    }
+
+    public String getStext1() 
+    {
+        return stext1;
+    }
+    public void setObjid2(String objid2) 
+    {
+        this.objid2 = objid2;
+    }
+
+    public String getObjid2() 
+    {
+        return objid2;
+    }
+    public void setStext2(String stext2) 
+    {
+        this.stext2 = stext2;
+    }
+
+    public String getStext2() 
+    {
+        return stext2;
+    }
+    public void setObjid3(String objid3) 
+    {
+        this.objid3 = objid3;
+    }
+
+    public String getObjid3() 
+    {
+        return objid3;
+    }
+    public void setStext3(String stext3) 
+    {
+        this.stext3 = stext3;
+    }
+
+    public String getStext3() 
+    {
+        return stext3;
+    }
+    public void setObjid4(String objid4) 
+    {
+        this.objid4 = objid4;
+    }
+
+    public String getObjid4() 
+    {
+        return objid4;
+    }
+    public void setStext4(String stext4) 
+    {
+        this.stext4 = stext4;
+    }
+
+    public String getStext4() 
+    {
+        return stext4;
+    }
+    public void setObjid5(String objid5) 
+    {
+        this.objid5 = objid5;
+    }
+
+    public String getObjid5() 
+    {
+        return objid5;
+    }
+    public void setStext5(String stext5) 
+    {
+        this.stext5 = stext5;
+    }
+
+    public String getStext5() 
+    {
+        return stext5;
+    }
+    public void setObjid6(String objid6) 
+    {
+        this.objid6 = objid6;
+    }
+
+    public String getObjid6() 
+    {
+        return objid6;
+    }
+    public void setPoste(String poste) 
+    {
+        this.poste = poste;
+    }
+
+    public String getPoste() 
+    {
+        return poste;
+    }
+    public void setPackageId(String packageId) 
+    {
+        this.packageId = packageId;
+    }
+
+    public String getPackageId() 
+    {
+        return packageId;
+    }
+    public void setLineId(String lineId) 
+    {
+        this.lineId = lineId;
+    }
+
+    public String getLineId() 
+    {
+        return lineId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("name", getName())
+            .append("loginname", getLoginname())
+            .append("email", getEmail())
+            .append("mobile", getMobile())
+            .append("sapemployeeid", getSapemployeeid())
+            .append("status", getStatus())
+            .append("leavedate", getLeavedate())
+            .append("objid1", getObjid1())
+            .append("stext1", getStext1())
+            .append("objid2", getObjid2())
+            .append("stext2", getStext2())
+            .append("objid3", getObjid3())
+            .append("stext3", getStext3())
+            .append("objid4", getObjid4())
+            .append("stext4", getStext4())
+            .append("objid5", getObjid5())
+            .append("stext5", getStext5())
+            .append("objid6", getObjid6())
+            .append("poste", getPoste())
+            .append("packageId", getPackageId())
+            .append("lineId", getLineId())
+            .toString();
+    }
+}

+ 66 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/domain/SyncFailDetail.java

@@ -0,0 +1,66 @@
+package com.dgtly.sync.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;
+
+/**
+ * 同步解析失败详情对象 sync_fail_detail
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+public class SyncFailDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 所属包id */
+    @Excel(name = "所属包id")
+    private String packageId;
+
+    /** 失败原因 */
+    @Excel(name = "失败原因")
+    private String failReason;
+
+    /** 数据json */
+    @Excel(name = "数据json")
+    private String dataJson;
+
+    public void setPackageId(String packageId) 
+    {
+        this.packageId = packageId;
+    }
+
+    public String getPackageId() 
+    {
+        return packageId;
+    }
+    public void setFailReason(String failReason) 
+    {
+        this.failReason = failReason;
+    }
+
+    public String getFailReason() 
+    {
+        return failReason;
+    }
+    public void setDataJson(String dataJson) 
+    {
+        this.dataJson = dataJson;
+    }
+
+    public String getDataJson() 
+    {
+        return dataJson;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("packageId", getPackageId())
+            .append("failReason", getFailReason())
+            .append("dataJson", getDataJson())
+            .toString();
+    }
+}

+ 151 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/domain/SyncLog.java

@@ -0,0 +1,151 @@
+package com.dgtly.sync.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+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;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 同步解析日志对象 sync_log
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+public class SyncLog
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 解析的包id */
+    private String packageId;
+
+    /** 成功条数 */
+    @Excel(name = "成功条数")
+    private Long successCount;
+
+    /** 失败条数 */
+    @Excel(name = "失败条数")
+    private Long faileCount;
+
+    /** 总数 */
+    @Excel(name = "总数")
+    private Long totalCount;
+
+    /** 解析的类型 */
+    private String syncType;
+
+    /**  创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**  开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+
+    /**  结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+    /** 请求参数 */
+    private Map<String, Object> params;
+
+    public Map<String, Object> getParams()
+    {
+        if (params == null)
+        {
+            params = new HashMap<>();
+        }
+        return params;
+    }
+
+    public void setParams(Map<String, Object> params)
+    {
+        this.params = params;
+    }
+
+
+    public void setPackageId(String packageId) 
+    {
+        this.packageId = packageId;
+    }
+
+    public String getPackageId() 
+    {
+        return packageId;
+    }
+    public void setSuccessCount(Long successCount) 
+    {
+        this.successCount = successCount;
+    }
+
+    public Long getSuccessCount() 
+    {
+        return successCount;
+    }
+    public void setFaileCount(Long faileCount) 
+    {
+        this.faileCount = faileCount;
+    }
+
+    public Long getFaileCount() 
+    {
+        return faileCount;
+    }
+    public void setTotalCount(Long totalCount) 
+    {
+        this.totalCount = totalCount;
+    }
+
+    public Long getTotalCount() 
+    {
+        return totalCount;
+    }
+    public void setSyncType(String syncType)
+    {
+        this.syncType = syncType;
+    }
+
+    public String getSyncType()
+    {
+        return syncType;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("packageId", getPackageId())
+            .append("successCount", getSuccessCount())
+            .append("faileCount", getFaileCount())
+            .append("totalCount", getTotalCount())
+            .append("syncType", getSyncType())
+            .toString();
+    }
+}

+ 40 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/exception/EndLessLoopParentException.java

@@ -0,0 +1,40 @@
+package com.dgtly.sync.exception;
+
+import com.dgtly.common.exception.base.BaseException;
+import com.dgtly.sync.domain.MetaNipponOrgRelation;
+
+//查找祖籍列表 死循环异常
+public class EndLessLoopParentException extends BaseException {
+
+    /**
+     * 部门id
+     */
+    private MetaNipponOrgRelation metaNipponOrgRelation;
+
+
+    /**
+     * 错误信息
+     */
+    private String msg;
+
+    public EndLessLoopParentException(MetaNipponOrgRelation metaNipponOrgRelation){
+        super("sync","500",
+                new Object[] { "部门id:"+metaNipponOrgRelation.getSobid(),
+                        "父id:"+metaNipponOrgRelation.getSobid(),
+                "packageId:"+metaNipponOrgRelation.getPackageId()},null);
+        String str = "部门id:"+metaNipponOrgRelation.getObjid()+",父Id:"+
+                metaNipponOrgRelation.getSobid()+"在packageId:"+metaNipponOrgRelation.getPackageId()+"次解析中,发生死循环查找";
+        this.msg = str;
+
+    }
+
+    @Override
+    public String getMessage(){
+        return this.msg;
+    }
+
+
+    public MetaNipponOrgRelation getMetaNipponOrgRelation() {
+        return metaNipponOrgRelation;
+    }
+}

+ 39 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/exception/NotFoundParentException.java

@@ -0,0 +1,39 @@
+package com.dgtly.sync.exception;
+
+import com.dgtly.common.exception.base.BaseException;
+import com.dgtly.sync.domain.MetaNipponOrgRelation;
+
+public class NotFoundParentException extends BaseException {
+
+    /**
+     * 部门id
+     */
+    private MetaNipponOrgRelation metaNipponOrgRelation;
+
+
+    /**
+     * 错误信息
+     */
+    private String msg;
+
+    public NotFoundParentException(MetaNipponOrgRelation metaNipponOrgRelation){
+        super("sync","500",
+                new Object[] { "部门id:"+metaNipponOrgRelation.getSobid(),
+                        "父id:"+metaNipponOrgRelation.getSobid(),
+                "packageId:"+metaNipponOrgRelation.getPackageId()},null);
+        String str = "部门id:"+metaNipponOrgRelation.getObjid()+",父Id:"+
+                metaNipponOrgRelation.getSobid()+"在packageId:"+metaNipponOrgRelation.getPackageId()+"次解析中,未找到相应父部门";
+        this.msg = str;
+
+    }
+
+    @Override
+    public String getMessage(){
+        return this.msg;
+    }
+
+
+    public MetaNipponOrgRelation getMetaNipponOrgRelation() {
+        return metaNipponOrgRelation;
+    }
+}

+ 62 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/mapper/MetaNipponOrgRelationMapper.java

@@ -0,0 +1,62 @@
+package com.dgtly.sync.mapper;
+
+import com.dgtly.sync.domain.MetaNipponOrgRelation;
+
+import java.util.List;
+
+/**
+ * 随身邦客户部门Mapper接口
+ * 
+ * @author qxp
+ * @date 2020-07-15
+ */
+public interface MetaNipponOrgRelationMapper 
+{
+    /**
+     * 查询随身邦客户部门
+     * 
+     * @param objid 随身邦客户部门ID
+     * @return 随身邦客户部门
+     */
+    public MetaNipponOrgRelation selectMetaNipponOrgRelationById(Long objid);
+
+    /**
+     * 查询随身邦客户部门列表
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 随身邦客户部门集合
+     */
+    public List<MetaNipponOrgRelation> selectMetaNipponOrgRelationList(MetaNipponOrgRelation metaNipponOrgRelation);
+
+    /**
+     * 新增随身邦客户部门
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 结果
+     */
+    public int insertMetaNipponOrgRelation(MetaNipponOrgRelation metaNipponOrgRelation);
+
+    /**
+     * 修改随身邦客户部门
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 结果
+     */
+    public int updateMetaNipponOrgRelation(MetaNipponOrgRelation metaNipponOrgRelation);
+
+    /**
+     * 删除随身邦客户部门
+     * 
+     * @param objid 随身邦客户部门ID
+     * @return 结果
+     */
+    public int deleteMetaNipponOrgRelationById(Long objid);
+
+    /**
+     * 批量删除随身邦客户部门
+     * 
+     * @param objids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteMetaNipponOrgRelationByIds(String[] objids);
+}

+ 61 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/mapper/MetaUserinfoAllMapper.java

@@ -0,0 +1,61 @@
+package com.dgtly.sync.mapper;
+
+import com.dgtly.sync.domain.MetaUserinfoAll;
+import java.util.List;
+
+/**
+ * 立邦用户数据Mapper接口
+ * 
+ * @author qxp
+ * @date 2020-07-16
+ */
+public interface MetaUserinfoAllMapper 
+{
+    /**
+     * 查询立邦用户数据
+     * 
+     * @param id 立邦用户数据ID
+     * @return 立邦用户数据
+     */
+    public MetaUserinfoAll selectMetaUserinfoAllById(Long id);
+
+    /**
+     * 查询立邦用户数据列表
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 立邦用户数据集合
+     */
+    public List<MetaUserinfoAll> selectMetaUserinfoAllList(MetaUserinfoAll metaUserinfoAll);
+
+    /**
+     * 新增立邦用户数据
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 结果
+     */
+    public int insertMetaUserinfoAll(MetaUserinfoAll metaUserinfoAll);
+
+    /**
+     * 修改立邦用户数据
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 结果
+     */
+    public int updateMetaUserinfoAll(MetaUserinfoAll metaUserinfoAll);
+
+    /**
+     * 删除立邦用户数据
+     * 
+     * @param id 立邦用户数据ID
+     * @return 结果
+     */
+    public int deleteMetaUserinfoAllById(Long id);
+
+    /**
+     * 批量删除立邦用户数据
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteMetaUserinfoAllByIds(String[] ids);
+}

+ 71 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/mapper/SyncFailDetailMapper.java

@@ -0,0 +1,71 @@
+package com.dgtly.sync.mapper;
+
+import com.dgtly.sync.domain.SyncFailDetail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 同步解析失败详情Mapper接口
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+public interface SyncFailDetailMapper 
+{
+
+
+    /**
+     * 查询同步解析失败详情
+     * 
+     * @param packageId 同步解析失败详情ID
+     * @return 同步解析失败详情
+     */
+    public SyncFailDetail selectSyncFailDetailById(String packageId);
+
+    /**
+     * 查询同步解析失败详情列表
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 同步解析失败详情集合
+     */
+    public List<SyncFailDetail> selectSyncFailDetailList(SyncFailDetail syncFailDetail);
+
+    /**
+     * 新增同步解析失败详情
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 结果
+     */
+    public int insertSyncFailDetail(SyncFailDetail syncFailDetail);
+
+    /**
+     * 修改同步解析失败详情
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 结果
+     */
+    public int updateSyncFailDetail(SyncFailDetail syncFailDetail);
+
+    /**
+     * 删除同步解析失败详情
+     * 
+     * @param packageId 同步解析失败详情ID
+     * @return 结果
+     */
+    public int deleteSyncFailDetailById(String packageId);
+
+    /**
+     * 批量删除同步解析失败详情
+     * 
+     * @param packageIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSyncFailDetailByIds(String[] packageIds);
+    /**
+     * 批量插入同步解析失败详情
+     *
+     * @return 结果
+     */
+    Integer batchInsertSyncFailDetail(@Param("failDetails") List<SyncFailDetail> failDetails);
+}

+ 61 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/mapper/SyncLogMapper.java

@@ -0,0 +1,61 @@
+package com.dgtly.sync.mapper;
+
+import com.dgtly.sync.domain.SyncLog;
+import java.util.List;
+
+/**
+ * 同步解析日志Mapper接口
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+public interface SyncLogMapper 
+{
+    /**
+     * 查询同步解析日志
+     * 
+     * @param packageId 同步解析日志ID
+     * @return 同步解析日志
+     */
+    public SyncLog selectSyncLogById(String packageId);
+
+    /**
+     * 查询同步解析日志列表
+     * 
+     * @param syncLog 同步解析日志
+     * @return 同步解析日志集合
+     */
+    public List<SyncLog> selectSyncLogList(SyncLog syncLog);
+
+    /**
+     * 新增同步解析日志
+     * 
+     * @param syncLog 同步解析日志
+     * @return 结果
+     */
+    public int insertSyncLog(SyncLog syncLog);
+
+    /**
+     * 修改同步解析日志
+     * 
+     * @param syncLog 同步解析日志
+     * @return 结果
+     */
+    public int updateSyncLog(SyncLog syncLog);
+
+    /**
+     * 删除同步解析日志
+     * 
+     * @param packageId 同步解析日志ID
+     * @return 结果
+     */
+    public int deleteSyncLogById(String packageId);
+
+    /**
+     * 批量删除同步解析日志
+     * 
+     * @param packageIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSyncLogByIds(String[] packageIds);
+}

+ 15 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/IAnalysisDeptService.java

@@ -0,0 +1,15 @@
+package com.dgtly.sync.service;
+
+import com.dgtly.sync.domain.SyncLog;
+
+import java.util.concurrent.Future;
+
+public interface IAnalysisDeptService {
+
+    /**
+     * 解析部门数据
+     * @param packageId
+     * @return
+     */
+    public SyncLog analysisDept(String packageId);
+}

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

@@ -0,0 +1,13 @@
+package com.dgtly.sync.service;
+
+import com.dgtly.sync.domain.SyncLog;
+
+public interface IAnalysisSysUserService {
+
+    /**
+     * 解析部门数据
+     * @param packageId
+     * @return
+     */
+    public SyncLog analysisSysUser(String packageId);
+}

+ 63 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/IMetaNipponOrgRelationService.java

@@ -0,0 +1,63 @@
+package com.dgtly.sync.service;
+
+
+import com.dgtly.sync.domain.MetaNipponOrgRelation;
+
+import java.util.List;
+
+/**
+ * 随身邦客户部门Service接口
+ * 
+ * @author qxp
+ * @date 2020-07-15
+ */
+public interface IMetaNipponOrgRelationService 
+{
+    /**
+     * 查询随身邦客户部门
+     * 
+     * @param objid 随身邦客户部门ID
+     * @return 随身邦客户部门
+     */
+    public MetaNipponOrgRelation selectMetaNipponOrgRelationById(Long objid);
+
+    /**
+     * 查询随身邦客户部门列表
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 随身邦客户部门集合
+     */
+    public List<MetaNipponOrgRelation> selectMetaNipponOrgRelationList(MetaNipponOrgRelation metaNipponOrgRelation);
+
+    /**
+     * 新增随身邦客户部门
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 结果
+     */
+    public int insertMetaNipponOrgRelation(MetaNipponOrgRelation metaNipponOrgRelation);
+
+    /**
+     * 修改随身邦客户部门
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 结果
+     */
+    public int updateMetaNipponOrgRelation(MetaNipponOrgRelation metaNipponOrgRelation);
+
+    /**
+     * 批量删除随身邦客户部门
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteMetaNipponOrgRelationByIds(String ids);
+
+    /**
+     * 删除随身邦客户部门信息
+     * 
+     * @param objid 随身邦客户部门ID
+     * @return 结果
+     */
+    public int deleteMetaNipponOrgRelationById(Long objid);
+}

+ 61 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/IMetaUserinfoAllService.java

@@ -0,0 +1,61 @@
+package com.dgtly.sync.service;
+
+import com.dgtly.sync.domain.MetaUserinfoAll;
+import java.util.List;
+
+/**
+ * 立邦用户数据Service接口
+ * 
+ * @author qxp
+ * @date 2020-07-16
+ */
+public interface IMetaUserinfoAllService 
+{
+    /**
+     * 查询立邦用户数据
+     * 
+     * @param id 立邦用户数据ID
+     * @return 立邦用户数据
+     */
+    public MetaUserinfoAll selectMetaUserinfoAllById(Long id);
+
+    /**
+     * 查询立邦用户数据列表
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 立邦用户数据集合
+     */
+    public List<MetaUserinfoAll> selectMetaUserinfoAllList(MetaUserinfoAll metaUserinfoAll);
+
+    /**
+     * 新增立邦用户数据
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 结果
+     */
+    public int insertMetaUserinfoAll(MetaUserinfoAll metaUserinfoAll);
+
+    /**
+     * 修改立邦用户数据
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 结果
+     */
+    public int updateMetaUserinfoAll(MetaUserinfoAll metaUserinfoAll);
+
+    /**
+     * 批量删除立邦用户数据
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteMetaUserinfoAllByIds(String ids);
+
+    /**
+     * 删除立邦用户数据信息
+     * 
+     * @param id 立邦用户数据ID
+     * @return 结果
+     */
+    public int deleteMetaUserinfoAllById(Long id);
+}

+ 70 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/ISyncFailDetailService.java

@@ -0,0 +1,70 @@
+package com.dgtly.sync.service;
+
+import com.dgtly.sync.domain.SyncFailDetail;
+import java.util.List;
+
+/**
+ * 同步解析失败详情Service接口
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+public interface ISyncFailDetailService 
+{
+
+
+    /**
+     * 查询同步解析失败详情
+     * 
+     * @param packageId 同步解析失败详情ID
+     * @return 同步解析失败详情
+     */
+    public SyncFailDetail selectSyncFailDetailById(String packageId);
+
+    /**
+     * 查询同步解析失败详情列表
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 同步解析失败详情集合
+     */
+    public List<SyncFailDetail> selectSyncFailDetailList(SyncFailDetail syncFailDetail);
+
+    /**
+     * 新增同步解析失败详情
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 结果
+     */
+    public int insertSyncFailDetail(SyncFailDetail syncFailDetail);
+
+    /**
+     * 修改同步解析失败详情
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 结果
+     */
+    public int updateSyncFailDetail(SyncFailDetail syncFailDetail);
+
+    /**
+     * 批量删除同步解析失败详情
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteSyncFailDetailByIds(String ids);
+
+    /**
+     * 删除同步解析失败详情信息
+     * 
+     * @param packageId 同步解析失败详情ID
+     * @return 结果
+     */
+    public int deleteSyncFailDetailById(String packageId);
+
+    /**
+     * 批量插入失败详情
+     *
+     * @return 结果
+     */
+    public Integer batchInsertSyncFailDetail(List<SyncFailDetail> failDetails);
+}

+ 41 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/ISyncLogService.java

@@ -0,0 +1,41 @@
+package com.dgtly.sync.service;
+
+import com.dgtly.sync.domain.SyncFailDetail;
+import com.dgtly.sync.domain.SyncLog;
+import java.util.List;
+
+/**
+ * 同步解析日志Service接口
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+public interface ISyncLogService 
+{
+
+
+    /**
+     * 查询同步解析日志
+     * 
+     * @param packageId 同步解析日志ID
+     * @return 同步解析日志
+     */
+    public SyncLog selectSyncLogById(String packageId);
+
+    /**
+     * 查询同步解析日志列表
+     * 
+     * @param syncLog 同步解析日志
+     * @return 同步解析日志集合
+     */
+    public List<SyncLog> selectSyncLogList(SyncLog syncLog);
+
+    /**
+     * 新增同步解析日志
+     * 
+     * @param syncLog 同步解析日志
+     * @return 结果
+     */
+    public int insertSyncLog(SyncLog syncLog);
+
+}

+ 188 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/AnalysisDeptService.java

@@ -0,0 +1,188 @@
+package com.dgtly.sync.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dgtly.common.exception.BusinessException;
+import com.dgtly.sync.controller.SyncController;
+import com.dgtly.sync.domain.MetaNipponOrgRelation;
+import com.dgtly.sync.domain.SyncFailDetail;
+import com.dgtly.sync.domain.SyncLog;
+import com.dgtly.sync.exception.EndLessLoopParentException;
+import com.dgtly.sync.exception.NotFoundParentException;
+import com.dgtly.sync.mapper.SyncFailDetailMapper;
+import com.dgtly.sync.mapper.SyncLogMapper;
+import com.dgtly.sync.service.IAnalysisDeptService;
+import com.dgtly.sync.service.IMetaNipponOrgRelationService;
+import com.dgtly.sync.service.ISyncFailDetailService;
+import com.dgtly.sync.service.ISyncLogService;
+import com.dgtly.system.domain.SysDept;
+import com.dgtly.system.mapper.SysDeptMapper;
+import com.dgtly.system.service.ISysDeptService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.AsyncResult;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class AnalysisDeptService  implements IAnalysisDeptService {
+
+    private static final Logger log = LoggerFactory.getLogger(SyncController.class);
+
+
+    @Autowired
+    private IMetaNipponOrgRelationService metaNipponOrgRelationService;
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+
+    @Autowired
+    private SyncFailDetailMapper syncFailDetailMapper;
+    @Autowired
+    private ISyncLogService syncLogService;
+
+
+
+    /**
+     * 解析部门数据  异步执行
+     * @param packageId
+     * @return
+     */
+    @Override
+    @Async
+    public SyncLog analysisDept(String packageId){
+        //查询所需要的基础数据
+        MetaNipponOrgRelation selectParam = new MetaNipponOrgRelation();
+        selectParam.setPackageId(packageId);
+        List<MetaNipponOrgRelation> list =  metaNipponOrgRelationService.selectMetaNipponOrgRelationList(selectParam);
+
+        SyncLog syncLog = new SyncLog();
+        syncLog.setSyncType("dept");
+        syncLog.setStartTime(new Date());
+        syncLog.setPackageId(packageId);
+        syncLog.setTotalCount((long)list.size());
+        List<SyncFailDetail> failDetails = new ArrayList<>();
+        long successCount = 0;
+        long failCount = 0;
+        if(list.size()>0){
+            List<SysDept> sysDepts = sysDeptMapper.selectDeptList(new SysDept());
+            //待插入或更新的list转HashMap提高查找效率  部门id  部门
+            Map<Long,MetaNipponOrgRelation> nMap = new HashMap<>();
+            for (MetaNipponOrgRelation n:list){
+                nMap.put(n.getObjid(),n);
+            }
+            //已存在部门转HashMap提高查找效率 父id  祖籍列表值
+            Map<Long,String> ancestorsMap = new HashMap<>();
+            List<Long> sysDeptIdList = new ArrayList<>();
+            for(SysDept sysDept:sysDepts){
+                ancestorsMap.put(sysDept.getDeptId(),sysDept.getAncestors());
+                sysDeptIdList.add(sysDept.getDeptId());
+            }
+
+
+            for(int i=0;i< list.size();i++){
+                MetaNipponOrgRelation n = list.get(i);
+                SysDept dept = orgRelation2SysDept(n);
+                Long id = n.getObjid();
+
+                //获取祖籍列表 ancestors 字段
+                String ancestors = "";
+                Set<Long> idSet = new HashSet<>();
+                try {
+                    //  递归查询祖籍列表
+                    ancestors = getAncestors(n,ancestorsMap,nMap,idSet);
+                    dept.setAncestors(ancestors);
+                    //判断是添加还是更新
+                    if(sysDeptIdList.contains(id)){
+                        sysDeptMapper.updateDept(dept);
+                    }else{
+                        sysDeptMapper.insertDeptReturnId(dept);
+                    }
+                    successCount++;
+                }catch (Exception e){
+                    failCount++;
+                    SyncFailDetail syncFailDetail = new SyncFailDetail();
+                    syncFailDetail.setPackageId(packageId);
+                    syncFailDetail.setFailReason(e.getMessage());
+                    syncFailDetail.setDataJson(JSONObject.toJSONString(n));
+                    failDetails.add(syncFailDetail);
+                    e.printStackTrace();
+                    log.error("解析部门出错",e);
+                }
+            }
+            syncLog.setSuccessCount(successCount);
+            syncLog.setFaileCount(failCount);
+        }else{
+            syncLog.setSuccessCount(0l);
+            syncLog.setFaileCount(0l);
+        }
+        try{
+            syncLog.setEndTime(new Date());
+            if(failDetails.size()>0){
+                syncFailDetailMapper.batchInsertSyncFailDetail(failDetails);
+            }
+        }catch (Exception e){
+            log.error("解析部门插入解析日志出错",e);
+            e.printStackTrace();
+            throw new BusinessException("解析部门插入解析日志出错",e);
+        }finally {
+            syncLogService.insertSyncLog(syncLog);
+        }
+        return syncLog;
+    }
+
+
+    /***
+     *  递归查询祖籍列表
+     */
+    public String getAncestors(MetaNipponOrgRelation nipponOrgRelation, Map<Long,String> ancestorsMap, Map<Long,MetaNipponOrgRelation> listMap,Set<Long> idSet){
+        String ancestors ="";
+        Long parentId =Long.parseLong(nipponOrgRelation.getSobid());
+        Long id = nipponOrgRelation.getObjid();
+        idSet.add(id);
+       //防止死循环
+        if(idSet.contains(parentId)){
+
+            ancestorsMap.put(id,"error");
+            throw new EndLessLoopParentException(nipponOrgRelation);
+        }
+        if(ancestorsMap.containsKey(parentId)){
+            if(ancestorsMap.get(parentId).equals("error")){
+                throw new NotFoundParentException(nipponOrgRelation);
+            }
+            //所属事项的父事项存在数据库中
+            ancestors = ancestorsMap.get(parentId)+","+id;
+            ancestorsMap.put(id,ancestors);
+        }else{
+            //父事项不存存在父数据库中  前往当前列表中查询
+            if(listMap.containsKey(parentId)){
+                nipponOrgRelation = listMap.get(parentId);
+                id  = nipponOrgRelation.getObjid();
+                ancestors= getAncestors(nipponOrgRelation,ancestorsMap,listMap,idSet)+","+id;
+                ancestorsMap.put(id,ancestors);
+            }else{
+                ancestorsMap.put(id,"error");
+                throw new NotFoundParentException(nipponOrgRelation);
+            }
+
+        }
+        return ancestors;
+    }
+
+    private SysDept orgRelation2SysDept(MetaNipponOrgRelation metaNipponOrgRelation){
+        SysDept dept = new SysDept();
+        Long id = metaNipponOrgRelation.getObjid();
+        Long parentId = Long.parseLong(metaNipponOrgRelation.getSobid());
+        //构建插入或更新的部门信息
+        dept.setDeptName(metaNipponOrgRelation.getStext());
+        dept.setRemark(metaNipponOrgRelation.getShort());
+        dept.setDeptId(id);
+        dept.setParentId(parentId);
+        dept.setCompanyId(1l);
+        return dept;
+    }
+
+}

+ 149 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/AnalysisSysUserService.java

@@ -0,0 +1,149 @@
+package com.dgtly.sync.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dgtly.common.exception.BusinessException;
+import com.dgtly.common.utils.ShiroSaltUtil;
+import com.dgtly.common.utils.security.EncryptPassWordClass;
+import com.dgtly.sync.controller.SyncController;
+import com.dgtly.sync.domain.MetaNipponOrgRelation;
+import com.dgtly.sync.domain.MetaUserinfoAll;
+import com.dgtly.sync.domain.SyncFailDetail;
+import com.dgtly.sync.domain.SyncLog;
+import com.dgtly.sync.exception.EndLessLoopParentException;
+import com.dgtly.sync.exception.NotFoundParentException;
+import com.dgtly.sync.mapper.MetaUserinfoAllMapper;
+import com.dgtly.sync.mapper.SyncFailDetailMapper;
+import com.dgtly.sync.service.IAnalysisDeptService;
+import com.dgtly.sync.service.IAnalysisSysUserService;
+import com.dgtly.sync.service.IMetaNipponOrgRelationService;
+import com.dgtly.sync.service.ISyncLogService;
+import com.dgtly.system.domain.SysConfig;
+import com.dgtly.system.domain.SysDept;
+import com.dgtly.system.domain.SysUser;
+import com.dgtly.system.mapper.SysDeptMapper;
+import com.dgtly.system.service.ISysConfigService;
+import com.dgtly.system.service.ISysUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service
+public class AnalysisSysUserService implements IAnalysisSysUserService {
+
+    private static final Logger log = LoggerFactory.getLogger(SyncController.class);
+
+
+
+
+    @Autowired
+    private SyncFailDetailMapper syncFailDetailMapper;
+    @Autowired
+    private ISysConfigService configService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+    @Autowired
+    private MetaUserinfoAllMapper metaUserinfoAllMapper;
+    @Autowired
+    private ISyncLogService syncLogService;
+
+
+
+    /**
+     * 解析部门数据  异步执行
+     * @param packageId
+     * @return
+     */
+    @Override
+    @Async
+    public SyncLog analysisSysUser(String packageId){
+        MetaUserinfoAll param = new MetaUserinfoAll();
+        param.setPackageId(packageId);
+
+        SyncLog syncLog = new SyncLog();
+        syncLog.setSyncType("sysuser");
+        syncLog.setStartTime(new Date());
+
+        Set<String> loginNameList = sysUserService.selectAllUserLoginName();
+        List<MetaUserinfoAll> metaUserinfoAlls = metaUserinfoAllMapper.selectMetaUserinfoAllList(param);
+
+
+        syncLog.setPackageId(packageId);
+        syncLog.setTotalCount((long)metaUserinfoAlls.size());
+        List<SyncFailDetail> failDetails = new ArrayList<>();
+        long successCount = 0;
+        long failCount = 0;
+
+        Long deptId = Long.parseLong(configService.selectConfigByKey("libang.user.deptid"));
+        Long roleId = Long.parseLong(configService.selectConfigByKey("libang.user.roleid"));
+        Long[] roleIds = {roleId};
+        if(metaUserinfoAlls.size()>0){
+            for(MetaUserinfoAll m:metaUserinfoAlls) {
+                try {
+                    SysUser user = new SysUser();
+                    user.setCompanyId(1L);
+                    user.setDeptId(deptId);
+                    user.setLoginName(m.getLoginname());
+                    user.setUserName(m.getName());
+                    user.setEmail(m.getEmail());
+                    user.setPhonenumber(m.getMobile());
+
+                    user.setRoleIds(roleIds);
+                    if (m.getStatus() == 0) {
+                        user.setStatus("1");
+                        user.setDelFlag("2");
+                    } else {
+                        user.setStatus("0");
+                    }
+
+                    if (loginNameList.contains(user.getLoginName())) {
+                        sysUserService.updateUserInfo(user);
+                    } else {
+                        //修改密码并加密
+                        user.setPassword(m.getLoginname());
+                        user.setSalt(ShiroSaltUtil.randomSalt());
+                        user.setPassword(EncryptPassWordClass.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
+
+                        sysUserService.insertUser(user);
+                    }
+                    successCount++;
+                } catch (Exception e) {
+                    failCount++;
+                    SyncFailDetail syncFailDetail = new SyncFailDetail();
+                    syncFailDetail.setPackageId(packageId);
+                    syncFailDetail.setFailReason(e.getMessage());
+                    syncFailDetail.setDataJson(JSONObject.toJSONString(m));
+                    failDetails.add(syncFailDetail);
+                    e.printStackTrace();
+                    log.error("解析用户出错", e);
+                }
+            }
+            syncLog.setSuccessCount(successCount);
+            syncLog.setFaileCount(failCount);
+        }else{
+            syncLog.setSuccessCount(0l);
+            syncLog.setFaileCount(0l);
+        }
+        try{
+            syncLog.setEndTime(new Date());
+            if(failDetails.size()>0){
+                syncFailDetailMapper.batchInsertSyncFailDetail(failDetails);
+            }
+        }catch (Exception e){
+            log.error("解析用户插入解析日志出错",e);
+            e.printStackTrace();
+            throw new BusinessException("解析用户插入解析日志出错",e);
+        }finally {
+            syncLogService.insertSyncLog(syncLog);
+        }
+        return syncLog;
+
+    }
+
+
+
+}

+ 95 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/MetaNipponOrgRelationServiceImpl.java

@@ -0,0 +1,95 @@
+package com.dgtly.sync.service.impl;
+
+import java.util.List;
+
+import com.dgtly.sync.domain.MetaNipponOrgRelation;
+import com.dgtly.sync.mapper.MetaNipponOrgRelationMapper;
+import com.dgtly.sync.service.IMetaNipponOrgRelationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dgtly.common.core.text.Convert;
+
+/**
+ * 随身邦客户部门Service业务层处理
+ * 
+ * @author qxp
+ * @date 2020-07-15
+ */
+@Service
+public class MetaNipponOrgRelationServiceImpl implements IMetaNipponOrgRelationService 
+{
+    @Autowired
+    private MetaNipponOrgRelationMapper metaNipponOrgRelationMapper;
+
+    /**
+     * 查询随身邦客户部门
+     * 
+     * @param objid 随身邦客户部门ID
+     * @return 随身邦客户部门
+     */
+    @Override
+    public MetaNipponOrgRelation selectMetaNipponOrgRelationById(Long objid)
+    {
+        return metaNipponOrgRelationMapper.selectMetaNipponOrgRelationById(objid);
+    }
+
+    /**
+     * 查询随身邦客户部门列表
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 随身邦客户部门
+     */
+    @Override
+    public List<MetaNipponOrgRelation> selectMetaNipponOrgRelationList(MetaNipponOrgRelation metaNipponOrgRelation)
+    {
+        return metaNipponOrgRelationMapper.selectMetaNipponOrgRelationList(metaNipponOrgRelation);
+    }
+
+    /**
+     * 新增随身邦客户部门
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 结果
+     */
+    @Override
+    public int insertMetaNipponOrgRelation(MetaNipponOrgRelation metaNipponOrgRelation)
+    {
+        return metaNipponOrgRelationMapper.insertMetaNipponOrgRelation(metaNipponOrgRelation);
+    }
+
+    /**
+     * 修改随身邦客户部门
+     * 
+     * @param metaNipponOrgRelation 随身邦客户部门
+     * @return 结果
+     */
+    @Override
+    public int updateMetaNipponOrgRelation(MetaNipponOrgRelation metaNipponOrgRelation)
+    {
+        return metaNipponOrgRelationMapper.updateMetaNipponOrgRelation(metaNipponOrgRelation);
+    }
+
+    /**
+     * 删除随身邦客户部门对象
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteMetaNipponOrgRelationByIds(String ids)
+    {
+        return metaNipponOrgRelationMapper.deleteMetaNipponOrgRelationByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除随身邦客户部门信息
+     * 
+     * @param objid 随身邦客户部门ID
+     * @return 结果
+     */
+    @Override
+    public int deleteMetaNipponOrgRelationById(Long objid)
+    {
+        return metaNipponOrgRelationMapper.deleteMetaNipponOrgRelationById(objid);
+    }
+}

+ 94 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/MetaUserinfoAllServiceImpl.java

@@ -0,0 +1,94 @@
+package com.dgtly.sync.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dgtly.sync.mapper.MetaUserinfoAllMapper;
+import com.dgtly.sync.domain.MetaUserinfoAll;
+import com.dgtly.sync.service.IMetaUserinfoAllService;
+import com.dgtly.common.core.text.Convert;
+
+/**
+ * 立邦用户数据Service业务层处理
+ * 
+ * @author qxp
+ * @date 2020-07-16
+ */
+@Service
+public class MetaUserinfoAllServiceImpl implements IMetaUserinfoAllService 
+{
+    @Autowired
+    private MetaUserinfoAllMapper metaUserinfoAllMapper;
+
+    /**
+     * 查询立邦用户数据
+     * 
+     * @param id 立邦用户数据ID
+     * @return 立邦用户数据
+     */
+    @Override
+    public MetaUserinfoAll selectMetaUserinfoAllById(Long id)
+    {
+        return metaUserinfoAllMapper.selectMetaUserinfoAllById(id);
+    }
+
+    /**
+     * 查询立邦用户数据列表
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 立邦用户数据
+     */
+    @Override
+    public List<MetaUserinfoAll> selectMetaUserinfoAllList(MetaUserinfoAll metaUserinfoAll)
+    {
+        return metaUserinfoAllMapper.selectMetaUserinfoAllList(metaUserinfoAll);
+    }
+
+    /**
+     * 新增立邦用户数据
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 结果
+     */
+    @Override
+    public int insertMetaUserinfoAll(MetaUserinfoAll metaUserinfoAll)
+    {
+        return metaUserinfoAllMapper.insertMetaUserinfoAll(metaUserinfoAll);
+    }
+
+    /**
+     * 修改立邦用户数据
+     * 
+     * @param metaUserinfoAll 立邦用户数据
+     * @return 结果
+     */
+    @Override
+    public int updateMetaUserinfoAll(MetaUserinfoAll metaUserinfoAll)
+    {
+        return metaUserinfoAllMapper.updateMetaUserinfoAll(metaUserinfoAll);
+    }
+
+    /**
+     * 删除立邦用户数据对象
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteMetaUserinfoAllByIds(String ids)
+    {
+        return metaUserinfoAllMapper.deleteMetaUserinfoAllByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除立邦用户数据信息
+     * 
+     * @param id 立邦用户数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteMetaUserinfoAllById(Long id)
+    {
+        return metaUserinfoAllMapper.deleteMetaUserinfoAllById(id);
+    }
+}

+ 102 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/SyncFailDetailServiceImpl.java

@@ -0,0 +1,102 @@
+package com.dgtly.sync.service.impl;
+
+import java.util.Arrays;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dgtly.sync.mapper.SyncFailDetailMapper;
+import com.dgtly.sync.domain.SyncFailDetail;
+import com.dgtly.sync.service.ISyncFailDetailService;
+import com.dgtly.common.core.text.Convert;
+import org.yaml.snakeyaml.util.ArrayUtils;
+
+/**
+ * 同步解析失败详情Service业务层处理
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+@Service
+public class SyncFailDetailServiceImpl implements ISyncFailDetailService 
+{
+    @Autowired
+    private SyncFailDetailMapper syncFailDetailMapper;
+
+    /**
+     * 查询同步解析失败详情
+     * 
+     * @param packageId 同步解析失败详情ID
+     * @return 同步解析失败详情
+     */
+    @Override
+    public SyncFailDetail selectSyncFailDetailById(String packageId)
+    {
+        return syncFailDetailMapper.selectSyncFailDetailById(packageId);
+    }
+
+    /**
+     * 查询同步解析失败详情列表
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 同步解析失败详情
+     */
+    @Override
+    public List<SyncFailDetail> selectSyncFailDetailList(SyncFailDetail syncFailDetail)
+    {
+        return syncFailDetailMapper.selectSyncFailDetailList(syncFailDetail);
+    }
+
+    /**
+     * 新增同步解析失败详情
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 结果
+     */
+    @Override
+    public int insertSyncFailDetail(SyncFailDetail syncFailDetail)
+    {
+        return syncFailDetailMapper.insertSyncFailDetail(syncFailDetail);
+    }
+
+    /**
+     * 修改同步解析失败详情
+     * 
+     * @param syncFailDetail 同步解析失败详情
+     * @return 结果
+     */
+    @Override
+    public int updateSyncFailDetail(SyncFailDetail syncFailDetail)
+    {
+        return syncFailDetailMapper.updateSyncFailDetail(syncFailDetail);
+    }
+
+    /**
+     * 删除同步解析失败详情对象
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSyncFailDetailByIds(String ids)
+    {
+        return syncFailDetailMapper.deleteSyncFailDetailByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除同步解析失败详情信息
+     * 
+     * @param packageId 同步解析失败详情ID
+     * @return 结果
+     */
+    @Override
+    public int deleteSyncFailDetailById(String packageId)
+    {
+        return syncFailDetailMapper.deleteSyncFailDetailById(packageId);
+    }
+
+    @Override
+    public Integer batchInsertSyncFailDetail(List<SyncFailDetail> failDetails) {
+
+        return syncFailDetailMapper.batchInsertSyncFailDetail(failDetails);
+    }
+}

+ 62 - 0
suishenbang-sync/src/main/java/com/dgtly/sync/service/impl/SyncLogServiceImpl.java

@@ -0,0 +1,62 @@
+package com.dgtly.sync.service.impl;
+
+import java.util.List;
+import com.dgtly.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dgtly.sync.mapper.SyncLogMapper;
+import com.dgtly.sync.domain.SyncLog;
+import com.dgtly.sync.service.ISyncLogService;
+import com.dgtly.common.core.text.Convert;
+
+/**
+ * 同步解析日志Service业务层处理
+ * 
+ * @author qxp
+ * @date 2020-07-14
+ */
+@Service
+public class SyncLogServiceImpl implements ISyncLogService 
+{
+    @Autowired
+    private SyncLogMapper syncLogMapper;
+
+    /**
+     * 查询同步解析日志
+     * 
+     * @param packageId 同步解析日志ID
+     * @return 同步解析日志
+     */
+    @Override
+    public SyncLog selectSyncLogById(String packageId)
+    {
+        return syncLogMapper.selectSyncLogById(packageId);
+    }
+
+    /**
+     * 查询同步解析日志列表
+     * 
+     * @param syncLog 同步解析日志
+     * @return 同步解析日志
+     */
+    @Override
+    public List<SyncLog> selectSyncLogList(SyncLog syncLog)
+    {
+        return syncLogMapper.selectSyncLogList(syncLog);
+    }
+
+    /**
+     * 新增同步解析日志
+     * 
+     * @param syncLog 同步解析日志
+     * @return 结果
+     */
+    @Override
+    public int insertSyncLog(SyncLog syncLog)
+    {
+        syncLog.setCreateTime(DateUtils.getNowDate());
+        return syncLogMapper.insertSyncLog(syncLog);
+    }
+
+
+}

+ 80 - 0
suishenbang-sync/src/main/resources/mapper/sync/MetaNipponOrgRelationMapper.xml

@@ -0,0 +1,80 @@
+<?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.sync.mapper.MetaNipponOrgRelationMapper">
+
+    <resultMap type="MetaNipponOrgRelation" id="MetaNipponOrgRelationResult">
+        <result property="objid"    column="objid"    />
+        <result property="short"    column="short"    />
+        <result property="stext"    column="stext"    />
+        <result property="sobid"    column="sobid"    />
+        <result property="lineId"    column="line_id"    />
+        <result property="packageId"    column="package_id"    />
+    </resultMap>
+
+    <sql id="selectMetaNipponOrgRelationVo">
+        select objid, short, stext, sobid, line_id, package_id from meta_nippon_org_relation
+    </sql>
+
+    <select id="selectMetaNipponOrgRelationList" parameterType="MetaNipponOrgRelation" resultMap="MetaNipponOrgRelationResult">
+        <include refid="selectMetaNipponOrgRelationVo"/>
+        <where>
+            <if test="objid != null "> and objid = #{objid}</if>
+            <if test="short != null  and short != ''"> and short = #{short}</if>
+            <if test="stext != null  and stext != ''"> and stext = #{stext}</if>
+            <if test="sobid != null  and sobid != ''"> and sobid = #{sobid}</if>
+            <if test="lineId != null  and lineId != ''"> and line_id = #{lineId}</if>
+            <if test="packageId != null  and packageId != ''"> and package_id = #{packageId}</if>
+        </where>
+    </select>
+
+    <select id="selectMetaNipponOrgRelationById" parameterType="Long" resultMap="MetaNipponOrgRelationResult">
+        <include refid="selectMetaNipponOrgRelationVo"/>
+        where objid = #{objid}
+    </select>
+
+    <insert id="insertMetaNipponOrgRelation" parameterType="MetaNipponOrgRelation">
+        insert into meta_nippon_org_relation
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="objid != null ">objid,</if>
+            <if test="short != null  and short != ''">short,</if>
+            <if test="stext != null  and stext != ''">stext,</if>
+            <if test="sobid != null  and sobid != ''">sobid,</if>
+            <if test="lineId != null  and lineId != ''">line_id,</if>
+            <if test="packageId != null  and packageId != ''">package_id,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="objid != null ">#{objid},</if>
+            <if test="short != null  and short != ''">#{short},</if>
+            <if test="stext != null  and stext != ''">#{stext},</if>
+            <if test="sobid != null  and sobid != ''">#{sobid},</if>
+            <if test="lineId != null  and lineId != ''">#{lineId},</if>
+            <if test="packageId != null  and packageId != ''">#{packageId},</if>
+        </trim>
+    </insert>
+
+    <update id="updateMetaNipponOrgRelation" parameterType="MetaNipponOrgRelation">
+        update meta_nippon_org_relation
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="short != null  and short != ''">short = #{short},</if>
+            <if test="stext != null  and stext != ''">stext = #{stext},</if>
+            <if test="sobid != null  and sobid != ''">sobid = #{sobid},</if>
+            <if test="lineId != null  and lineId != ''">line_id = #{lineId},</if>
+            <if test="packageId != null  and packageId != ''">package_id = #{packageId},</if>
+        </trim>
+        where objid = #{objid}
+    </update>
+
+    <delete id="deleteMetaNipponOrgRelationById" parameterType="Long">
+        delete from meta_nippon_org_relation where objid = #{objid}
+    </delete>
+
+    <delete id="deleteMetaNipponOrgRelationByIds" parameterType="String">
+        delete from meta_nippon_org_relation where objid in
+        <foreach item="objid" collection="array" open="(" separator="," close=")">
+            #{objid}
+        </foreach>
+    </delete>
+
+</mapper>

+ 160 - 0
suishenbang-sync/src/main/resources/mapper/sync/MetaUserinfoAllMapper.xml

@@ -0,0 +1,160 @@
+<?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.sync.mapper.MetaUserinfoAllMapper">
+    
+    <resultMap type="MetaUserinfoAll" id="MetaUserinfoAllResult">
+        <result property="id"    column="Id"    />
+        <result property="name"    column="Name"    />
+        <result property="loginname"    column="LoginName"    />
+        <result property="email"    column="Email"    />
+        <result property="mobile"    column="Mobile"    />
+        <result property="sapemployeeid"    column="SapEmployeeId"    />
+        <result property="status"    column="Status"    />
+        <result property="leavedate"    column="LeaveDate"    />
+        <result property="objid1"    column="OBJID_1"    />
+        <result property="stext1"    column="STEXT_1"    />
+        <result property="objid2"    column="OBJID_2"    />
+        <result property="stext2"    column="STEXT_2"    />
+        <result property="objid3"    column="OBJID_3"    />
+        <result property="stext3"    column="STEXT_3"    />
+        <result property="objid4"    column="OBJID_4"    />
+        <result property="stext4"    column="STEXT_4"    />
+        <result property="objid5"    column="OBJID_5"    />
+        <result property="stext5"    column="STEXT_5"    />
+        <result property="objid6"    column="OBJID_6"    />
+        <result property="poste"    column="POSTE"    />
+        <result property="packageId"    column="package_id"    />
+        <result property="lineId"    column="line_id"    />
+    </resultMap>
+
+    <sql id="selectMetaUserinfoAllVo">
+        select Id, Name, LoginName, Email, Mobile, SapEmployeeId, Status, LeaveDate, OBJID_1, STEXT_1, OBJID_2, STEXT_2, OBJID_3, STEXT_3, OBJID_4, STEXT_4, OBJID_5, STEXT_5, OBJID_6, POSTE, package_id, line_id from meta_userinfo_all
+    </sql>
+
+    <select id="selectMetaUserinfoAllList" parameterType="MetaUserinfoAll" resultMap="MetaUserinfoAllResult">
+        <include refid="selectMetaUserinfoAllVo"/>
+        <where>  
+            <if test="id != null "> and Id = #{id}</if>
+            <if test="name != null  and name != ''"> and Name like concat('%', #{name}, '%')</if>
+            <if test="loginname != null  and loginname != ''"> and LoginName like concat('%', #{loginname}, '%')</if>
+            <if test="email != null  and email != ''"> and Email = #{email}</if>
+            <if test="mobile != null  and mobile != ''"> and Mobile = #{mobile}</if>
+            <if test="sapemployeeid != null  and sapemployeeid != ''"> and SapEmployeeId = #{sapemployeeid}</if>
+            <if test="status != null "> and Status = #{status}</if>
+            <if test="leavedate != null "> and LeaveDate = #{leavedate}</if>
+            <if test="objid1 != null  and objid1 != ''"> and OBJID_1 = #{objid1}</if>
+            <if test="stext1 != null  and stext1 != ''"> and STEXT_1 = #{stext1}</if>
+            <if test="objid2 != null  and objid2 != ''"> and OBJID_2 = #{objid2}</if>
+            <if test="stext2 != null  and stext2 != ''"> and STEXT_2 = #{stext2}</if>
+            <if test="objid3 != null  and objid3 != ''"> and OBJID_3 = #{objid3}</if>
+            <if test="stext3 != null  and stext3 != ''"> and STEXT_3 = #{stext3}</if>
+            <if test="objid4 != null  and objid4 != ''"> and OBJID_4 = #{objid4}</if>
+            <if test="stext4 != null  and stext4 != ''"> and STEXT_4 = #{stext4}</if>
+            <if test="objid5 != null  and objid5 != ''"> and OBJID_5 = #{objid5}</if>
+            <if test="stext5 != null  and stext5 != ''"> and STEXT_5 = #{stext5}</if>
+            <if test="objid6 != null  and objid6 != ''"> and OBJID_6 = #{objid6}</if>
+            <if test="poste != null  and poste != ''"> and POSTE = #{poste}</if>
+            <if test="packageId != null  and packageId != ''"> and package_id = #{packageId}</if>
+            <if test="lineId != null  and lineId != ''"> and line_id = #{lineId}</if>
+        </where>
+    </select>
+    
+    <select id="selectMetaUserinfoAllById" parameterType="Long" resultMap="MetaUserinfoAllResult">
+        <include refid="selectMetaUserinfoAllVo"/>
+        where Id = #{id}
+    </select>
+        
+    <insert id="insertMetaUserinfoAll" parameterType="MetaUserinfoAll">
+        insert into meta_userinfo_all
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null ">Id,</if>
+            <if test="name != null  and name != ''">Name,</if>
+            <if test="loginname != null  and loginname != ''">LoginName,</if>
+            <if test="email != null  and email != ''">Email,</if>
+            <if test="mobile != null  and mobile != ''">Mobile,</if>
+            <if test="sapemployeeid != null  and sapemployeeid != ''">SapEmployeeId,</if>
+            <if test="status != null ">Status,</if>
+            <if test="leavedate != null ">LeaveDate,</if>
+            <if test="objid1 != null  and objid1 != ''">OBJID_1,</if>
+            <if test="stext1 != null  and stext1 != ''">STEXT_1,</if>
+            <if test="objid2 != null  and objid2 != ''">OBJID_2,</if>
+            <if test="stext2 != null  and stext2 != ''">STEXT_2,</if>
+            <if test="objid3 != null  and objid3 != ''">OBJID_3,</if>
+            <if test="stext3 != null  and stext3 != ''">STEXT_3,</if>
+            <if test="objid4 != null  and objid4 != ''">OBJID_4,</if>
+            <if test="stext4 != null  and stext4 != ''">STEXT_4,</if>
+            <if test="objid5 != null  and objid5 != ''">OBJID_5,</if>
+            <if test="stext5 != null  and stext5 != ''">STEXT_5,</if>
+            <if test="objid6 != null  and objid6 != ''">OBJID_6,</if>
+            <if test="poste != null  and poste != ''">POSTE,</if>
+            <if test="packageId != null  and packageId != ''">package_id,</if>
+            <if test="lineId != null  and lineId != ''">line_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null ">#{id},</if>
+            <if test="name != null  and name != ''">#{name},</if>
+            <if test="loginname != null  and loginname != ''">#{loginname},</if>
+            <if test="email != null  and email != ''">#{email},</if>
+            <if test="mobile != null  and mobile != ''">#{mobile},</if>
+            <if test="sapemployeeid != null  and sapemployeeid != ''">#{sapemployeeid},</if>
+            <if test="status != null ">#{status},</if>
+            <if test="leavedate != null ">#{leavedate},</if>
+            <if test="objid1 != null  and objid1 != ''">#{objid1},</if>
+            <if test="stext1 != null  and stext1 != ''">#{stext1},</if>
+            <if test="objid2 != null  and objid2 != ''">#{objid2},</if>
+            <if test="stext2 != null  and stext2 != ''">#{stext2},</if>
+            <if test="objid3 != null  and objid3 != ''">#{objid3},</if>
+            <if test="stext3 != null  and stext3 != ''">#{stext3},</if>
+            <if test="objid4 != null  and objid4 != ''">#{objid4},</if>
+            <if test="stext4 != null  and stext4 != ''">#{stext4},</if>
+            <if test="objid5 != null  and objid5 != ''">#{objid5},</if>
+            <if test="stext5 != null  and stext5 != ''">#{stext5},</if>
+            <if test="objid6 != null  and objid6 != ''">#{objid6},</if>
+            <if test="poste != null  and poste != ''">#{poste},</if>
+            <if test="packageId != null  and packageId != ''">#{packageId},</if>
+            <if test="lineId != null  and lineId != ''">#{lineId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMetaUserinfoAll" parameterType="MetaUserinfoAll">
+        update meta_userinfo_all
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null  and name != ''">Name = #{name},</if>
+            <if test="loginname != null  and loginname != ''">LoginName = #{loginname},</if>
+            <if test="email != null  and email != ''">Email = #{email},</if>
+            <if test="mobile != null  and mobile != ''">Mobile = #{mobile},</if>
+            <if test="sapemployeeid != null  and sapemployeeid != ''">SapEmployeeId = #{sapemployeeid},</if>
+            <if test="status != null ">Status = #{status},</if>
+            <if test="leavedate != null ">LeaveDate = #{leavedate},</if>
+            <if test="objid1 != null  and objid1 != ''">OBJID_1 = #{objid1},</if>
+            <if test="stext1 != null  and stext1 != ''">STEXT_1 = #{stext1},</if>
+            <if test="objid2 != null  and objid2 != ''">OBJID_2 = #{objid2},</if>
+            <if test="stext2 != null  and stext2 != ''">STEXT_2 = #{stext2},</if>
+            <if test="objid3 != null  and objid3 != ''">OBJID_3 = #{objid3},</if>
+            <if test="stext3 != null  and stext3 != ''">STEXT_3 = #{stext3},</if>
+            <if test="objid4 != null  and objid4 != ''">OBJID_4 = #{objid4},</if>
+            <if test="stext4 != null  and stext4 != ''">STEXT_4 = #{stext4},</if>
+            <if test="objid5 != null  and objid5 != ''">OBJID_5 = #{objid5},</if>
+            <if test="stext5 != null  and stext5 != ''">STEXT_5 = #{stext5},</if>
+            <if test="objid6 != null  and objid6 != ''">OBJID_6 = #{objid6},</if>
+            <if test="poste != null  and poste != ''">POSTE = #{poste},</if>
+            <if test="packageId != null  and packageId != ''">package_id = #{packageId},</if>
+            <if test="lineId != null  and lineId != ''">line_id = #{lineId},</if>
+        </trim>
+        where Id = #{id}
+    </update>
+
+    <delete id="deleteMetaUserinfoAllById" parameterType="Long">
+        delete from meta_userinfo_all where Id = #{id}
+    </delete>
+
+    <delete id="deleteMetaUserinfoAllByIds" parameterType="String">
+        delete from meta_userinfo_all where Id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    
+</mapper>

+ 77 - 0
suishenbang-sync/src/main/resources/mapper/sync/SyncFailDetailMapper.xml

@@ -0,0 +1,77 @@
+<?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.sync.mapper.SyncFailDetailMapper">
+    
+    <resultMap type="SyncFailDetail" id="SyncFailDetailResult">
+        <result property="packageId"    column="package_id"    />
+        <result property="failReason"    column="fail_reason"    />
+        <result property="dataJson"    column="data_json"    />
+    </resultMap>
+
+    <sql id="selectSyncFailDetailVo">
+        select package_id, fail_reason, data_json from sync_fail_detail
+    </sql>
+
+    <select id="selectSyncFailDetailList" parameterType="SyncFailDetail" resultMap="SyncFailDetailResult">
+        <include refid="selectSyncFailDetailVo"/>
+        <where>  
+            <if test="packageId != null  and packageId != ''"> and package_id = #{packageId}</if>
+            <if test="failReason != null  and failReason != ''"> and fail_reason = #{failReason}</if>
+            <if test="dataJson != null  and dataJson != ''"> and data_json = #{dataJson}</if>
+        </where>
+    </select>
+    
+    <select id="selectSyncFailDetailById" parameterType="String" resultMap="SyncFailDetailResult">
+        <include refid="selectSyncFailDetailVo"/>
+        where package_id = #{packageId}
+    </select>
+        
+    <insert id="insertSyncFailDetail" parameterType="SyncFailDetail">
+        insert into sync_fail_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="packageId != null  and packageId != ''">package_id,</if>
+            <if test="failReason != null  and failReason != ''">fail_reason,</if>
+            <if test="dataJson != null  and dataJson != ''">data_json,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="packageId != null  and packageId != ''">#{packageId},</if>
+            <if test="failReason != null  and failReason != ''">#{failReason},</if>
+            <if test="dataJson != null  and dataJson != ''">#{dataJson},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSyncFailDetail" parameterType="SyncFailDetail">
+        update sync_fail_detail
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="failReason != null  and failReason != ''">fail_reason = #{failReason},</if>
+            <if test="dataJson != null  and dataJson != ''">data_json = #{dataJson},</if>
+        </trim>
+        where package_id = #{packageId}
+    </update>
+
+    <delete id="deleteSyncFailDetailById" parameterType="String">
+        delete from sync_fail_detail where package_id = #{packageId}
+    </delete>
+
+    <delete id="deleteSyncFailDetailByIds" parameterType="String">
+        delete from sync_fail_detail where package_id in 
+        <foreach item="packageId" collection="array" open="(" separator="," close=")">
+            #{packageId}
+        </foreach>
+    </delete>
+
+    <insert id="batchInsertSyncFailDetail" parameterType="SyncFailDetail">
+        insert into sync_fail_detail (package_id,fail_reason,data_json)
+        values
+        <foreach item="obj" collection="failDetails"  separator=",">
+            (
+            #{obj.packageId},
+            #{obj.failReason},
+            #{obj.dataJson}
+            )
+        </foreach>
+    </insert>
+    
+</mapper>

+ 83 - 0
suishenbang-sync/src/main/resources/mapper/sync/SyncLogMapper.xml

@@ -0,0 +1,83 @@
+<?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.sync.mapper.SyncLogMapper">
+    
+    <resultMap type="SyncLog" id="SyncLogResult">
+        <result property="packageId"    column="package_id"    />
+        <result property="successCount"    column="success_count"    />
+        <result property="faileCount"    column="faile_count"    />
+        <result property="totalCount"    column="total_count"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="endTime"    column="end_time"    />
+        <result property="syncType"    column="sync_type"    />
+    </resultMap>
+
+    <sql id="selectSyncLogVo">
+        select package_id, success_count, faile_count, total_count, create_time, sync_type from sync_log
+    </sql>
+
+    <select id="selectSyncLogList" parameterType="SyncLog" resultMap="SyncLogResult">
+        <include refid="selectSyncLogVo"/>
+        <where>  
+            <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and create_time between #{params.beginCreateTime} and #{params.endCreateTime}</if>
+            <if test="syncType != null  and syncType != ''"> and sync_type = #{syncType}</if>
+        </where>
+    </select>
+    
+    <select id="selectSyncLogById" parameterType="String" resultMap="SyncLogResult">
+        <include refid="selectSyncLogVo"/>
+        where package_id = #{packageId}
+    </select>
+        
+    <insert id="insertSyncLog" parameterType="SyncLog">
+        insert into sync_log
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+           create_time,
+            <if test="packageId != null  and packageId != ''">package_id,</if>
+            <if test="successCount != null ">success_count,</if>
+            <if test="faileCount != null ">faile_count,</if>
+            <if test="totalCount != null ">total_count,</if>
+            <if test="startTime != null ">start_time,</if>
+            <if test="endTime != null ">end_time,</if>
+            <if test="syncType != null  and syncType != ''">sync_type,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            now(),
+            <if test="packageId != null  and packageId != ''">#{packageId},</if>
+            <if test="successCount != null ">#{successCount},</if>
+            <if test="faileCount != null ">#{faileCount},</if>
+            <if test="totalCount != null ">#{totalCount},</if>
+            <if test="startTime != null ">#{startTime},</if>
+            <if test="endTime != null ">#{endTime},</if>
+            <if test="syncType != null  and syncType != ''">#{syncType},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSyncLog" parameterType="SyncLog">
+        update sync_log
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="successCount != null ">success_count = #{successCount},</if>
+            <if test="faileCount != null ">faile_count = #{faileCount},</if>
+            <if test="totalCount != null ">total_count = #{totalCount},</if>
+            <if test="startTime != null ">start_time = #{startTime},</if>
+            <if test="endTime != null ">end_time = #{endTime},</if>
+            <if test="syncType != null  and syncType != ''">sync_type = #{syncType},</if>
+        </trim>
+        where package_id = #{packageId}
+    </update>
+
+    <delete id="deleteSyncLogById" parameterType="String">
+        delete from sync_log where package_id = #{packageId}
+    </delete>
+
+    <delete id="deleteSyncLogByIds" parameterType="String">
+        delete from sync_log where package_id in 
+        <foreach item="packageId" collection="array" open="(" separator="," close=")">
+            #{packageId}
+        </foreach>
+    </delete>
+    
+</mapper>

+ 26 - 0
suishenbang-sync/src/main/resources/templates/sync/synclog/edit.html

@@ -0,0 +1,26 @@
+<!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-synclog-edit" th:object="${syncLog}">
+            <input name="packageId" th:field="*{packageId}" type="hidden">
+        </form>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script type="text/javascript">
+        var prefix = ctx + "sync/synclog";
+        $("#form-synclog-edit").validate({
+            focusCleanup: true
+        });
+
+        function submitHandler() {
+            if ($.validate.form()) {
+                $.operate.save(prefix + "/edit", $('#form-synclog-edit').serialize());
+            }
+        }
+    </script>
+</body>
+</html>

+ 103 - 0
suishenbang-sync/src/main/resources/templates/sync/synclog/syncfaildetail.html

@@ -0,0 +1,103 @@
+<!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('同步解析失败详情列表')" />
+    <style>
+        .div_tdContent{
+            white-space:nowrap;
+            overflow:hidden;
+            text-overflow:ellipsis;
+        }
+        .tooltip-inner{
+            word-wrap: break-word;
+        }
+    </style>
+</head>
+<body class="gray-bg">
+     <div class="container-div">
+
+            <div class="col-sm-12 select-table table-striped">
+                <table id="bootstrap-table" style='table-layout:fixed;'></table>
+            </div>
+        </div>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var editFlag = [[${@permission.hasPermi('sync:syncfaildetail:edit')}]];
+        var prefix = ctx + "sync/synclog";
+        var packageId = [[${packageId}]]
+        $(function() {
+            var options = {
+                url: prefix + "/faildetaillist/"+packageId,
+                updateUrl: prefix + "/edit/{id}",
+                modalName: "同步解析失败详情",
+                responseHandler: responseHandler,
+                columns: [
+                // {
+                //     field : 'packageId',
+                //     title : '所属包id',
+                //     width : '20%',
+                //     show : true
+                // },
+                {
+                    field : 'failReason', 
+                    title : '失败原因',
+                    width : '35%',
+                    formatter: function(value, row, index) {
+
+                        var reg = new RegExp( '"' , "g" )
+                        value = value.replace(reg,'&quot;');
+                        var htmlStr = '<div data-original-title="'+value+'"' +
+                            'data-placement="bottom" data-toggle="tooltip" data-html="true"'+
+                            'class="div_tdContent">'+value+'</div>';
+                        return htmlStr;
+                    }
+                },
+                {
+                    field : 'dataJson', 
+                    title : '数据json',
+                    width : '35%',
+                    formatter: function(value, row, index) {
+                        var reg = new RegExp( '"' , "g" )
+                        value = value.replace(reg,'&quot;');
+
+                        var htmlStr = '<div data-original-title="'+value+'"' +
+                            'data-placement="bottom" data-toggle="tooltip" data-html="true"'+
+                            'class="div_tdContent">'+value+'</div>';
+                        return htmlStr;
+                    }
+                },
+                {
+                    title: '操作',
+                    align: 'center',
+                    width: '30%',
+                    formatter: function(value, row, index) {
+                        var actions = [];
+                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="copyValue('+index+',\'failReason\')"><i class="fa fa-edit"></i>复制错误</a> ');
+                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="copyValue('+index+',\'dataJson\')"><i class="fa fa-edit"></i>复制json</a> ');
+                        return actions.join('');
+                    }
+                }]
+            };
+            $.table.init(options);
+        });
+        function responseHandler(){
+            $('[data-toggle="tooltip"]').tooltip();
+        }
+        function copyValue(index,data){
+            var rows=$('#bootstrap-table').bootstrapTable('getData')
+            var value = rows[index][data];
+            var oInput = document.createElement('input');
+            oInput.value = value;
+            document.body.appendChild(oInput);
+            oInput.select(); // 选择对象
+            document.execCommand("Copy"); // 执行浏览器复制命令
+            oInput.className = 'oInput';
+            oInput.style.display='none';
+            alert('复制成功');
+
+
+        }
+    </script>
+</body>
+</html>

+ 96 - 0
suishenbang-sync/src/main/resources/templates/sync/synclog/synclog.html

@@ -0,0 +1,96 @@
+<!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 class="select-time">
+                                <p>创建时间:</p>
+                                <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginCreateTime]"/>
+                                <span>-</span>
+                                <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endCreateTime]"/>
+                            </li>
+                            <li>
+                                <p>解析的类型:</p>
+                                <select name="type" th:with="type=${@dict.getType('sync_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="$.table.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="col-sm-12 select-table table-striped">
+                <table id="bootstrap-table"></table>
+            </div>
+        </div>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var editFlag = [[${@permission.hasPermi('sync:synclog:edit')}]];
+        var removeFlag = [[${@permission.hasPermi('sync:synclog:remove')}]];
+        var typeDatas = [[${@dict.getType('sync_type')}]];
+        var prefix = ctx + "sync/synclog";
+
+        $(function() {
+            var options = {
+                url: prefix + "/list",
+                updateUrl: prefix + "/faildetail/{id}",
+                modalName: "同步解析日志",
+                columns: [{
+                    checkbox: true
+                },
+                {
+                    field : 'packageId', 
+                    title : '解析的包id',
+                    visible: false
+                },
+                {
+                    field : 'successCount', 
+                    title : '成功条数'
+                },
+                {
+                    field : 'faileCount', 
+                    title : '失败条数'
+                },
+                {
+                    field : 'totalCount', 
+                    title : '总数'
+                },
+                {
+                    field : 'createTime', 
+                    title : '创建时间'
+                },
+                {
+                    field : 'syncType',
+                    title : '解析的类型',
+                    formatter: function(value, row, index) {
+                       return $.table.selectDictLabel(typeDatas, value);
+                    }
+                },
+                {
+                    title: '操作',
+                    align: 'center',
+                    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.packageId + '\')"><i class="fa fa-edit"></i>查看详情</a> ');
+                        return actions.join('');
+                    }
+                }]
+            };
+            $.table.init(options);
+        });
+    </script>
+</body>
+</html>

+ 11 - 0
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserMapper.java

@@ -1,6 +1,8 @@
 package com.dgtly.system.mapper;
 
 import java.util.List;
+import java.util.Set;
+
 import com.dgtly.system.domain.SysUser;
 import org.apache.ibatis.annotations.Param;
 
@@ -11,6 +13,15 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface SysUserMapper
 {
+
+
+    /**
+     * 查询所有用户LoginName
+     *
+     * @return 用户信息集合信息
+     */
+    public Set<String> selectAllUserLoginName();
+
     /**
      * 根据条件分页查询用户列表
      * 

+ 30 - 1
suishenbang-system/src/main/java/com/dgtly/system/service/ISysDeptService.java

@@ -14,12 +14,19 @@ public interface ISysDeptService
 {
     /**
      * 查询部门管理数据
-     * 
+     *
      * @param dept 部门信息
      * @return 部门信息集合
      */
     public List<SysDept> selectDeptList(SysDept dept);
 
+    /**
+
+     * 查询所有部门信息
+     * @return 部门信息集合
+     */
+    public List<SysDept> selectAllDeptList();
+
     /**
      * 查询部门管理树
      * 
@@ -28,6 +35,13 @@ public interface ISysDeptService
      */
     public List<Ztree> selectDeptTree(SysDept dept);
 
+    /**
+     * 查询所有部门管理树
+     *
+     * @return 所有部门信息
+     */
+    public List<Ztree> selectAllDeptTree();
+
     /**
      * 根据角色ID查询菜单
      *
@@ -67,6 +81,13 @@ public interface ISysDeptService
      * @return 结果
      */
     public int insertDept(SysDept dept);
+    /**
+     * 直接插入系统部门不用计算祖籍列表
+     *
+     * @param dept 部门信息
+     * @return 结果
+     */
+    public int insertSysDept(SysDept dept);
 
     /**
      * 修改保存部门信息
@@ -75,6 +96,14 @@ public interface ISysDeptService
      * @return 结果
      */
     public int updateDept(SysDept dept);
+    /**
+     * 直接更新系统部门不用计算祖籍列表
+     *
+     * @param dept 部门信息
+     * @return 结果
+     */
+    public int upDateSysDept(SysDept dept);
+
 
     /**
      * 根据部门ID查询信息

+ 10 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserService.java

@@ -1,6 +1,7 @@
 package com.dgtly.system.service;
 
 import java.util.List;
+import java.util.Set;
 
 import com.dgtly.common.exception.BusinessException;
 import com.dgtly.system.domain.SysUser;
@@ -12,6 +13,15 @@ import com.dgtly.system.domain.SysUser;
  */
 public interface ISysUserService
 {
+
+
+    /**
+     * 查询所有用户LoginName
+     *
+     * @return 用户信息集合信息
+     */
+    public Set<String> selectAllUserLoginName();
+
     /**
      * 根据条件分页查询用户列表
      * 

+ 39 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysDeptServiceImpl.java

@@ -41,6 +41,13 @@ public class SysDeptServiceImpl implements ISysDeptService
         return deptMapper.selectDeptList(dept);
     }
 
+    @Override
+    public List<SysDept> selectAllDeptList()
+    {
+        return deptMapper.selectDeptList(new SysDept());
+    }
+
+
     /**
      * 查询部门管理树
      * 
@@ -56,6 +63,14 @@ public class SysDeptServiceImpl implements ISysDeptService
         return ztrees;
     }
 
+    @Override
+    public List<Ztree> selectAllDeptTree()
+    {
+        List<SysDept> deptList = deptMapper.selectDeptList(new SysDept());
+        List<Ztree> ztrees = initZtree(deptList);
+        return ztrees;
+    }
+
     /**
      * 根据角色ID查询部门(数据权限)
      *
@@ -202,6 +217,30 @@ public class SysDeptServiceImpl implements ISysDeptService
         }
     }
 
+    /**
+     * 直接插入系统部门不用计算祖籍列表
+     *
+     * @param dept 部门信息
+     * @return 结果
+     */
+    @Override
+    public int insertSysDept(SysDept dept)
+    {
+       return deptMapper.insertDeptReturnId(dept);
+    }
+
+    /**
+     * 直接更新系统部门不用计算祖籍列表
+     *
+     * @param dept 部门信息
+     * @return 结果
+     */
+    @Override
+    public int upDateSysDept(SysDept dept)
+    {
+        return deptMapper.updateDept(dept);
+    }
+
     /**
      * 修改保存部门信息
      * 

+ 14 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserServiceImpl.java

@@ -2,6 +2,8 @@ package com.dgtly.system.service.impl;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,6 +56,8 @@ public class SysUserServiceImpl implements ISysUserService
     @Autowired
     private ISysConfigService configService;
 
+
+
     /**
      * 根据条件分页查询用户列表
      * 
@@ -523,4 +527,14 @@ public class SysUserServiceImpl implements ISysUserService
 
 
 
+    /**
+     * 查询所有用户LoginName
+     *
+     * @return 用户信息集合信息
+     */
+    @Override
+    public Set<String> selectAllUserLoginName() {
+        return userMapper.selectAllUserLoginName();
+    }
+
 }

+ 5 - 0
suishenbang-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -274,6 +274,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 	</select>
 
+    <select id="selectAllUserLoginName"  resultType="String">
+        select u.login_name
+        from sys_user u
+    </select>
+
 
 
 </mapper> 

+ 2 - 5
suishenbang-wxportal/suishenbang-wxportal-manager/pom.xml

@@ -16,6 +16,7 @@
         <dependency>
             <groupId>com.dgtly</groupId>
             <artifactId>suishenbang-framework</artifactId>
+            <version>4.0.0</version>
         </dependency>
 
         <!--防止进入swagger页面报类型转换错误,排除2.9.2中的引用,手动增加1.5.21版本-->
@@ -44,11 +45,7 @@
             <artifactId>suishenbang-system</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>com.dgtly</groupId>
-            <artifactId>suishenbang-framework</artifactId>
-            <version>4.0.0</version>
-        </dependency>
+
     </dependencies>
 
 </project>