diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/role/service/RoleUserService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/role/service/RoleUserService.java
index e53c6a3ca73259e9392bfc88d21beb847aa54a5a..1c297ab678ddfebf38863179d6a7d7742ca28521 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/role/service/RoleUserService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/role/service/RoleUserService.java
@@ -27,4 +27,11 @@ public interface RoleUserService extends ICRUDService<RoleUserEntity,Long> {
     void doDistributionUser(RoleUserQuery query);
 
     void doDistributionRole(RoleUserQuery query);
+
+
+    /**
+     * 缁欑敤鎴峰垎閰嶈鑹�
+     * @param query
+     */
+    void assignRoleToUser(RoleUserQuery query);
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java
index 8251b7c55d3632f3a2902fcacc74693f947a8d09..68035ac62f2437d20eadd5fe1469fd6444df5149 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java
@@ -70,6 +70,26 @@ public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,Rol
         this.dao.insertBatch(list);
     }
 
+    @Override
+    public void assignRoleToUser(RoleUserQuery query) {
+        //鍒犻櫎褰撳墠鐢ㄦ埛鎵€鏈夊叧鑱旇鑹�
+        Long userId = query.getUserId();
+        Map<String, Object> condition = new HashMap<>(1);
+        condition.put("userId", userId);
+        dao.delete(condition);
+
+        //鏂板鐢ㄦ埛瑙掕壊
+        List<Long> roleIdList = query.getRoleIdList();
+        List<RoleUserEntity> list = new ArrayList<>();
+        for (Long roleId : roleIdList) {
+            RoleUserEntity rolseUser = new RoleUserEntity();
+            rolseUser.setRoleId(roleId);
+            rolseUser.setUserId(userId);
+            list.add(rolseUser);
+        }
+        this.save(list);
+    }
+
 
 
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
index eef23a063352d4b37681e1e6e8627168816b7dc8..e953f5b2c6de0725129bd9c07353d70b3a54c3e1 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
@@ -48,7 +48,7 @@ public class UserEntity extends UserVo implements IUser {
      */
     private String qq;
     /**
-     * 鐢ㄦ埛绫诲瀷(0.绯荤粺鐢ㄦ埛,1.鏅€氱敤鎴�,2.宸ヤ綔浜哄憳)
+     * 鐢ㄦ埛绫诲瀷(0.绯荤粺鐢ㄦ埛,1.鏅€氱敤鎴�,2.宸ヤ綔浜哄憳,3.鏅€氬憳宸�)
      */
     private Integer userType;
 
@@ -232,7 +232,7 @@ public class UserEntity extends UserVo implements IUser {
         this.qq = qq;
     }
     /**
-     * 鑾峰彇 鐢ㄦ埛绫诲瀷(0.绯荤粺鐢ㄦ埛,1.鏅€氱敤鎴�,2.宸ヤ綔浜哄憳)
+     * 鑾峰彇 鐢ㄦ埛绫诲瀷(0.绯荤粺鐢ㄦ埛,1.鏅€氱敤鎴�,2.宸ヤ綔浜哄憳,3.鏅€氬憳宸�)
      * @return Integer
      */
     public Integer getUserType(){
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/ApiLoginController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/ApiLoginController.java
index f541783b0ab71fb101d64d151a1c8cd2610a855f..9467414b6ece567d862520935e23a46804e8d311 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/ApiLoginController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/ApiLoginController.java
@@ -6,6 +6,7 @@ import com.mortals.framework.ap.CookieService;
 import com.mortals.framework.ap.GlobalSysInfo;
 import com.mortals.framework.ap.SysConstains;
 import com.mortals.framework.common.Rest;
+import com.mortals.framework.exception.AppException;
 import com.mortals.framework.service.IAuthTokenService;
 import com.mortals.framework.service.ICacheService;
 import com.mortals.framework.service.IUser;
@@ -32,6 +33,8 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -46,34 +49,12 @@ public class ApiLoginController extends BaseJsonBodyController {
     @Autowired
     private UserService userService;
     @Autowired
-    private ValidCodeService validCodeService;
-    @Autowired
-    private ResourceService resourceService;
-    @Autowired
-    private MenuService menuService;
-    //    @Autowired
-//    private ITokenService tokenService;
-    @Autowired
-    private ICacheService cacheService;
-    @Autowired
     private IAuthTokenService authTokenService;
 
 
     @RequestMapping("login")
     public String login(@RequestBody LoginForm loginForm) throws Exception {
 
-/*
-        JSONObject ret = new JSONObject();
-        String loginName = loginForm.getLoginName();
-        String password = loginForm.getPassword();
-
-        UserPdu userPdu = new UserPdu();
-        userPdu.setLoginName(loginName);
-        userPdu.setPassword(password);
-        String resp = userFeign.portalLogin(userPdu);
-
-        return resp;
-*/
         JSONObject ret = new JSONObject();
         String loginName = loginForm.getLoginName();
         String password = loginForm.getPassword();
@@ -88,42 +69,35 @@ public class ApiLoginController extends BaseJsonBodyController {
             loginForm.validate();
             userEntity = userService.doLogin(loginName, password, ip);
             userEntity.setLastLoginAddress(ip);
-
-            recordSysLog(request, userEntity, "鐢ㄦ埛鐧诲綍绯荤粺鎴愬姛!");
-            // 杩斿洖鎷ユ湁鐨勮彍鍗曟暟鎹�
-            Set<String> urls = resourceService.findUrlSetByUserId(userEntity.getId());
-            List<MenuEntity> outlookBarList = menuService.findTreeMenu(userEntity, urls);
+            recordSysLog(request, userEntity, "H5鐢ㄦ埛鐧诲綍绯荤粺鎴愬姛!");
             String currUserName = userEntity.getRealName();
             if (currUserName == null || currUserName.trim().length() == 0) {
                 currUserName = "绠$悊鍛�";
             }
             JSONObject data = new JSONObject();
             data.put("currUserName", currUserName);
-            data.put("barList", outlookBarList);
             data.put("id", userEntity.getId());
             data.put("userType", userEntity.getUserType());
+
+            HashSet<Integer> set = new HashSet<>();
+            set.add(1);
+            set.add(2);
+
+            if (ObjectUtils.isEmpty(userEntity.getUserType()) || !set.contains(userEntity.getUserType())) {
+                throw new AppException("褰撳墠鐢ㄦ埛涓嶆敮鎸丠5鐧诲綍!");
+            }
+
             userEntity.setLoginTime(System.currentTimeMillis());
             userEntity.setToken(IdUtil.fastSimpleUUID());
             userEntity.setExpireTime(DateUtils.addCurrDate(7).getTime());
-            userEntity.setMenuUrl(generateMenuUrlCode(urls));
-
             String token = authTokenService.createToken(userEntity);
             data.put("token", token);
-            //璁剧疆token 鍜岃繃鏈熸椂闂�
-            //data.put("expiresTime", DateUtils.addCurrDate(7).getTime());
-            generateMenuUrlCode(urls);
-            //this.generateBlackCookie(request, response, loginName, urls);
             ret.put(KEY_RESULT_DATA, data);
             ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
             ret.put(KEY_RESULT_MSG, "鐢ㄦ埛鐧诲綍绯荤粺鎴愬姛!");
-            ret.put("resources", urls);
             return ret.toJSONString();
         } catch (Exception e) {
-            log.error("login error ", e);
-            if (userEntity == null) {
-                userEntity = new UserEntity();
-                userEntity.setLoginName(loginName);
-            }
+            log.error("h5 login error ", e);
             ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
             ret.put(KEY_RESULT_MSG, super.convertException(e));
             return ret.toJSONString();
@@ -136,78 +110,6 @@ public class ApiLoginController extends BaseJsonBodyController {
         super.removeCurrUser(request);
     }
 
-    @RequestMapping("index")
-    public String index() throws Exception {
-        JSONObject ret = new JSONObject();
-        IUser user = this.getCurUser();
-        if (user == null) {
-            return JSONObject.toJSONString(Rest.fail(ERROR_TOKEN_EXPIRED, ERROR_TOKEN_EXPIRED_CONTENT));
-        }
-        Set<String> urls = resourceService.findUrlSetByUserId(user.getId());
-        List<MenuEntity> outlookBarList = menuService.findTreeMenu(user, urls);
-        String currUserName = user.getRealName();
-        if (currUserName == null || currUserName.trim().length() == 0) {
-            currUserName = "绠$悊鍛�";
-        }
-        JSONObject data = new JSONObject();
-
-        String token = authTokenService.getToken(request);
-        data.put("token", token);
-        data.put("currUserName", currUserName);
-        data.put("barList", outlookBarList);
-        data.put("id", user.getId());
-        data.put("userType", user.getUserType());
-        ret.put(KEY_RESULT_DATA, data);
-        //this.generateBlackCookie(request, response, user.getLoginName(), urls);
-        ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
-        ret.put(KEY_RESULT_MSG, "鐢ㄦ埛鐧诲綍绯荤粺鎴愬姛!");
-        ret.put("resources", urls);
-        return ret.toJSONString();
-    }
-
-    private void generateBlackCookie(HttpServletRequest request, HttpServletResponse response, String loginName, Set<String> urls) {
-        try {
-            String cacheKey = RedisKey.KEY_MENU_CACHE + loginName;
-            String securityKey = GlobalSysInfo.getPropertyValue(SysConstains.PROP_COOKIE_SECURITY_KEY);
-            //搴斾负Cookie浼氳秴闀匡紝鎵€浠ユ敼涓轰粎瀛樺偍key灏嗗€兼斁鍏edis
-            //CookieService.setCookieForAuth(request, response, securityKey, null);
-            StringBuilder sb = new StringBuilder();
-            if (urls != null && urls.size() > 0) {
-                for (String url : urls) {
-                    int index = url.hashCode() & (Integer.MAX_VALUE - 1);
-                    sb.append(index).append(",");
-                }
-            }
-            String menuUrl = sb.toString();
-            menuUrl = AESUtil.encrypt(menuUrl, securityKey);
-            cacheService.set(cacheKey, menuUrl, 604800);
-            HttpUtil.setCookieValue(request, response, SysConstains.COOKIE_MENU, cacheKey, -1);
-
-        } catch (Throwable e) {
-
-        }
-    }
-
-
-    private String generateMenuUrlCode(Set<String> urls) {
-        try {
-            String securityKey = GlobalSysInfo.getPropertyValue(SysConstains.PROP_COOKIE_SECURITY_KEY);
-            StringBuilder sb = new StringBuilder();
-            if (urls != null && urls.size() > 0) {
-                for (String url : urls) {
-                    int index = url.hashCode() & (Integer.MAX_VALUE - 1);
-                    sb.append(index).append(",");
-                }
-            }
-            String menuUrl = sb.toString();
-            return AESUtil.encrypt(menuUrl, securityKey);
-        } catch (Throwable e) {
-            log.error("缂栫爜寮傚父", e);
-            return null;
-
-        }
-    }
-
 
     @RequestMapping("parseToken")
     public IUser parseToken() throws Exception {
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/AppealApiController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/AppealApiController.java
index c1d88e716952d74f414769e06062be25838f8947..8fcdc89e8c872ab16ace9a6cd5b981d90579338f 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/AppealApiController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/AppealApiController.java
@@ -55,7 +55,7 @@ public class AppealApiController extends BaseJsonBodyController {
     /**
      * 涓汉鐢宠瘔缁╂晥缁熻
      */
-    @PostMapping(value = "appeal/stat")
+    @PostMapping(value = "stat")
     public Rest<AppealStatInfo> appealStat() {
         String busiDesc = "H5涓汉鐢宠瘔缁╂晥缁熻";
         Rest<AppealStatInfo> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
@@ -72,7 +72,7 @@ public class AppealApiController extends BaseJsonBodyController {
     /**
      * 鐢宠瘔鍒楄〃
      */
-    @PostMapping(value = "appeal/list")
+    @PostMapping(value = "list")
     public Rest<List<PerformAttendAppealEntity>> performList(@RequestBody AppealReq appealReq) {
         String busiDesc = "涓汉鐢宠瘔鍒楄〃";
         Rest<List<PerformAttendAppealEntity>> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
@@ -95,8 +95,8 @@ public class AppealApiController extends BaseJsonBodyController {
     /**
      * 鐢宠瘔璇︾粏
      */
-    @PostMapping(value = "appeal/detail")
-    public Rest<PerformAttendAppealEntity> performDetail(@RequestBody AppealReq appealReq) {
+    @PostMapping(value = "info")
+    public Rest<PerformAttendAppealEntity> performInfo(@RequestBody AppealReq appealReq) {
         String busiDesc = "涓汉鐢宠瘔璇︾粏";
         Rest<PerformAttendAppealEntity> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
         try {
@@ -116,7 +116,7 @@ public class AppealApiController extends BaseJsonBodyController {
     /**
      * 鐢宠瘔鏂板
      */
-    @PostMapping(value = "appeal/save")
+    @PostMapping(value = "save")
     public Rest<String> appealSave(@RequestBody PerformAttendAppealEntity appealEntity) {
         String busiDesc = "涓汉鐢宠瘔鏂板";
         Rest<String> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/FeedbackApiController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/FeedbackApiController.java
index 9c5d88ffd3d68d65407615b18d88842f55d37917..30184b25d3f29195ac6503eeff4efc187c294ac1 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/FeedbackApiController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/FeedbackApiController.java
@@ -48,7 +48,7 @@ public class FeedbackApiController extends BaseJsonBodyController {
     /**
      * 鍙嶉鍒楄〃
      */
-    @PostMapping(value = "feedback/list")
+    @PostMapping(value = "list")
     public Rest<List<PerformAttendAppealEntity>> feedbackList(@RequestBody FeedbackReq feedbackReq) {
         String busiDesc = "涓汉鍙嶉鍒楄〃";
         Rest<List<PerformAttendAppealEntity>> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
@@ -71,7 +71,7 @@ public class FeedbackApiController extends BaseJsonBodyController {
     /**
      * 鍙嶉璇︾粏
      */
-    @PostMapping(value = "feedback/question")
+    @PostMapping(value = "question")
     public Rest<PerformAttendAppealEntity> performDetail(@RequestBody AppealReq appealReq) {
         String busiDesc = "涓汉鐢宠瘔璇︾粏";
         Rest<PerformAttendAppealEntity> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
@@ -92,9 +92,9 @@ public class FeedbackApiController extends BaseJsonBodyController {
     /**
      * 鐢宠瘔鏂板
      */
-    @PostMapping(value = "appeal/save")
-    public Rest<String> appealSave(@RequestBody PerformAttendAppealEntity appealEntity) {
-        String busiDesc = "涓汉鐢宠瘔鏂板";
+    @PostMapping(value = "save")
+    public Rest<String> feedbackSave(@RequestBody PerformAttendAppealEntity appealEntity) {
+        String busiDesc = "鍙嶉鍥炵瓟";
         Rest<String> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
         try {
 
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/PerformApiController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/PerformApiController.java
index 23afe323ea4040d307d7f7eb60cdad678ba31971..6532da9d750f82b37ba181718023f8a267229d02 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/PerformApiController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/PerformApiController.java
@@ -47,7 +47,7 @@ public class PerformApiController extends BaseJsonBodyController {
     /**
      * 涓汉褰撳ぉ缁╂晥缁熻
      */
-    @PostMapping(value = "perform/stat")
+    @PostMapping(value = "stat")
     public Rest<PerformStatInfo> performStat() {
         String busiDesc = "H5 涓汉缁╂晥缁熻";
         Rest<PerformStatInfo> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
@@ -65,7 +65,7 @@ public class PerformApiController extends BaseJsonBodyController {
     /**
      * 涓汉褰撴湀缁╂晥鍔犲垎鎵e垎鍒楄〃
      */
-    @PostMapping(value = "perform/list")
+    @PostMapping(value = "list")
     public Rest<List<PerformInfo>> performList(@RequestBody PerformReq performReq) {
         String busiDesc = "涓汉缁╂晥鍒楄〃";
         Rest<List<PerformInfo>> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
@@ -107,7 +107,7 @@ public class PerformApiController extends BaseJsonBodyController {
     /**
      * 璇︾粏
      */
-    @PostMapping(value = "perform/info")
+    @PostMapping(value = "info")
     public Rest<PerformDetailInfo> performInfo(@RequestBody PerformReq performReq) {
         String busiDesc = "涓汉缁╂晥澧炲噺璇︾粏";
         Rest<PerformDetailInfo> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
index 11a2d2a1fede82ae8960ca4e2a0db7cac7b6170c..b74552ad22d5781c82a2f84133bcad7c5a729c8e 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
@@ -2,6 +2,7 @@ package com.mortals.xhx.daemon.task;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.PageUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.common.Rest;
@@ -115,7 +116,7 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
         List<AttendanceRecordHikEntity> attRecords = doorEventsRest.getData().getList().stream().map(item -> {
             AttendanceRecordHikEntity recordHikEntity = new AttendanceRecordHikEntity();
             recordHikEntity.initAttrValue();
-            StaffEntity staffCache = staffService.getExtCache(item.getJobNo());
+            StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
             if (ObjectUtils.isEmpty(staffCache)) {
                 log.info("staff is null !staffCode:{}",item.getJobNo());
                 return null;
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
index 9f2a376ae62aa2ebf8573f6b67e0f571dcee02b9..7437a060ca1655b6ee5ee5b1ab37db90139b2b39 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
@@ -1,5 +1,6 @@
 package com.mortals.xhx.daemon.task;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.common.Rest;
@@ -57,8 +58,6 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
     @Autowired
     private DeptService deptService;
 
-    @Autowired
-    private StaffService service;
     @Autowired
     private AttendanceStatService attendanceStatService;
 
@@ -70,12 +69,11 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
 
     @Override
     public void excuteTask(ITask task) throws AppException {
-        log.info("鍚屾鐢ㄦ埛--閮ㄩ棬");
         try {
-            //鍚屾閮ㄩ棬
-            syncDepts();
-            //鍚屾鍛樺伐
+            log.info("鍚屾鐢ㄦ埛");
             syncPersons();
+            log.info("鍚屾閮ㄩ棬");
+            syncDepts();
         } catch (Exception e) {
             log.error("鍚屾浜轰簨寮傚父", e);
         }
@@ -89,7 +87,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
         if (personRest.getCode() == YesNoEnum.YES.getValue()) {
             List<PersonInfo> personInfoList = personRest.getData().getList();
             for (PersonInfo personInfo : personInfoList) {
-                StaffEntity staffEntity = staffService.getExtCache(personInfo.getJobNo());
+                StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(personInfo.getJobNo(), 8, "0"));
                 DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(personInfo.getOrgIndexCode()));
                // AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId()));
                 //  AttendanceStatEntity statEntity = attendanceStatService.selectOne(new AttendanceStatQuery().staffId(staffEntity.getId()));
@@ -111,7 +109,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
                     staffEntity.setPhoneNumber(personInfo.getPhoneNo());
                     staffEntity.setCreateUserId(1L);
                     staffEntity.setCreateTime(new Date());
-                    service.save(staffEntity);
+                    staffService.save(staffEntity);
 
                     AttendanceVacationBalanceEntity balanceEntity = new AttendanceVacationBalanceEntity();
                     balanceEntity.initAttrValue();
@@ -181,7 +179,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
                     staffEntity.setPhoneNumber(personInfo.getPhoneNo());
                     staffEntity.setUpdateUserId(1L);
                     staffEntity.setUpdateTime(new Date());
-                    service.update(staffEntity);
+                    staffService.update(staffEntity);
                     //缁熻鍚勭骇閮ㄩ棬鍛樺伐鏁伴噺
                     String ancestor = deptEntity.getAncestors().split(",", 2)[1];
                     String[] ancestors = ancestor.split(",");
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
index 9d3d16c3b01862e934ff408c759751d44ebff773..246af21599a3c2e76bd4553e6ddd45316b11c734 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
@@ -1,9 +1,18 @@
 package com.mortals.xhx.module.staff.service.impl;
 
+import cn.hutool.core.util.StrUtil;
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.Context;
 import com.mortals.framework.service.impl.AbstractCRUDCacheServiceImpl;
+import com.mortals.framework.util.SecurityUtil;
+import com.mortals.xhx.base.system.role.model.RoleUserQuery;
+import com.mortals.xhx.base.system.role.service.RoleUserService;
+import com.mortals.xhx.base.system.user.model.UserEntity;
+import com.mortals.xhx.base.system.user.service.UserService;
 import com.mortals.xhx.common.code.StaffSatusEnum;
 import com.mortals.xhx.common.code.StaffTypeEnum;
 import com.mortals.xhx.common.code.StatusEnum;
+import com.mortals.xhx.common.code.UserStatus;
 import com.mortals.xhx.module.staff.dao.StaffDao;
 import com.mortals.xhx.module.staff.dao.ibatis.StaffDaoImpl;
 import com.mortals.xhx.module.staff.dao.ibatis.StaffLeaveDaoImpl;
@@ -13,8 +22,10 @@ import com.mortals.xhx.module.staff.model.vo.StaffInfoVo;
 import com.mortals.xhx.module.staff.service.StaffService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -29,10 +40,17 @@ import java.util.stream.Collectors;
 @Service("staffService")
 public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, StaffEntity, Long> implements StaffService {
 
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private RoleUserService roleUserService;
+
     @Override
     protected String getExtKey(StaffEntity data) {
         //宸ュ彿浣滀负redis 鎵╁睍key
-        return data.getWorkNum();
+        return StrUtil.padPre(data.getWorkNum(), 8, "0");
+        //  return "1000"+data.getWorkNum();
     }
 
     @Override
@@ -68,4 +86,51 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
         return staffEntities.size();
     }
 
+
+    @Override
+    protected void saveAfter(StaffEntity entity, Context context) throws AppException {
+        try {
+            UserEntity userEntity = new UserEntity();
+
+            if (ObjectUtils.isEmpty(entity.getLoginName())) {
+                //濮撳悕鍔犲伐鍙蜂綔涓虹櫥褰曞悕
+                entity.setLoginName(entity.getName() + entity.getWorkNum());
+            }
+            if (ObjectUtils.isEmpty(entity.getLoginPwd())) {
+                //璁剧疆鍒濆瀵嗙爜
+                entity.setLoginPwd("123456");
+            }
+
+            userEntity.setLoginName(StrUtil.cleanBlank(entity.getLoginName()));
+            userEntity.setRealName(entity.getName());
+            userEntity.setUserType(2);
+            userEntity.setSiteIds("1");
+            userEntity.setAreaCodes("511500000000");
+            userEntity.setStatus(UserStatus.NORMAL.getValue());
+            userEntity.setCreateUserId(this.getContextUserId(context));
+            userEntity.setCreateTime(new Date());
+            userEntity.setCustomerId(entity.getId());
+
+            userEntity.setLoginPwd(SecurityUtil.md5DoubleEncoding(entity.getLoginPwd()));
+            int insert = userService.getUserDao().insert(userEntity);
+            if (insert > 0) {
+                RoleUserQuery roleUserQuery = new RoleUserQuery();
+                roleUserQuery.setUserId(userEntity.getId());
+                roleUserQuery.setRoleIdList(Arrays.asList(4L));
+                roleUserService.assignRoleToUser(roleUserQuery);
+            }
+
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        super.saveAfter(entity, context);
+    }
+
+
+    public static void main(String[] args) {
+
+
+        System.out.println("1" + StrUtil.padPre("125", 7, "0"));
+
+    }
 }
\ No newline at end of file