diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/evnet/listener/UserRegisterEventLister.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/evnet/listener/UserRegisterEventLister.java new file mode 100644 index 0000000..e098234 --- /dev/null +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/evnet/listener/UserRegisterEventLister.java @@ -0,0 +1,39 @@ +package com.ensign.crm.module.crm.evnet.listener; + +import com.ensign.crm.module.crm.exception.AllKingdeeException; +import com.ensign.crm.module.crm.job.service.TaskHandler; +import com.ensign.crm.module.system.event.UserRegisterEvent; +import com.ensign.crm.module.system.service.permission.PermissionService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.ArrayList; + +/** + * @Description: TODO + * @Date: 2024/10/15 16:14 + * @Created: by ZZSLL + */ + + +@Component +@Slf4j +public class UserRegisterEventLister { + + @Autowired + private TaskHandler taskHandler; + + @Autowired + private PermissionService permissionService; + + @EventListener + public void onRegister(UserRegisterEvent event) throws AllKingdeeException, IOException, URISyntaxException { + log.info("[UserRegisterEventLister] onRegister"); + taskHandler.syncUser(event.getAdminUserDO(), new ArrayList<>()); + permissionService.assignPermissions(event.getAdminUserDO()); + } +} diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserSyncKingdeeTask.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserSyncKingdeeTask.java index 642d1a5..e4dfa38 100644 --- a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserSyncKingdeeTask.java +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserSyncKingdeeTask.java @@ -1,30 +1,19 @@ package com.ensign.crm.module.crm.job; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ensign.crm.framework.common.enums.CommonStatusEnum; import com.ensign.crm.framework.common.enums.CrmUserTypeEnum; -import com.ensign.crm.framework.common.enums.UserTypeEnum; import com.ensign.crm.framework.quartz.core.handler.JobHandler; import com.ensign.crm.framework.tenant.core.aop.TenantIgnore; -import com.ensign.crm.module.crm.exception.AllKingdeeException; -import com.ensign.crm.module.crm.service.ProxyService; +import com.ensign.crm.module.crm.job.service.TaskHandler; import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; import com.ensign.crm.module.system.dal.mysql.user.AdminUserMapper; -import com.ensign.crm.module.system.service.user.AdminUserService; import lombok.extern.slf4j.Slf4j; -import org.checkerframework.checker.units.qual.A; -import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.io.IOException; -import java.net.URISyntaxException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /** @@ -42,7 +31,7 @@ public class UserSyncKingdeeTask implements JobHandler { private AdminUserMapper userMapper; @Autowired - private ProxyService proxyService; + private TaskHandler taskHandler; @Override @TenantIgnore @@ -55,7 +44,7 @@ public class UserSyncKingdeeTask implements JobHandler { List errors = new ArrayList<>(); for (AdminUserDO user : users) { - doSyncUser(user, errors); + taskHandler.syncUser(user, errors); } List errorIds = errors.stream() @@ -76,48 +65,4 @@ public class UserSyncKingdeeTask implements JobHandler { .map(user -> user.getUsername() + "_" + user.getNickname()) .collect(Collectors.joining(", ")); } - - public void doSyncUser(AdminUserDO user, List errors) throws AllKingdeeException, IOException, URISyntaxException { - Map body = convertToKingdeeObj(user); - log.info("请求body:{}", body); - JSONObject jsonObject = proxyService.doRequest("/ierp/kapi/v2/yem/yem_crmbasic/yem_crm_dealeruser/CRM_yem_crm_dealeruser", "POST", body, null); - log.info("响应body:{}", jsonObject); - if (jsonObject.containsKey("status") && jsonObject.containsKey("errorCode")) { - if (jsonObject.getBoolean("status") && jsonObject.getInteger("errorCode") == 0) { - if (jsonObject.containsKey("data")) { - JSONObject dataObject = jsonObject.getJSONObject("data"); - if (dataObject.containsKey("successCount")) { - int successCount = dataObject.getInteger("successCount"); - if (successCount < 1) { - errors.add(user); - log.error("异常数据"); - } - - if (successCount == 1) { - user.setIsSyncKingdee(CommonStatusEnum.ENABLE.getStatus()); - userMapper.updateById(user); - } - } - } - } - } - } - - @NotNull - public static Map convertToKingdeeObj(AdminUserDO user) { - List> list = new ArrayList<>(); - - Map addUser = new HashMap<>(); - addUser.put("number", user.getUsername());//编码 - addUser.put("name", user.getNickname());//经销商销售员 - addUser.put("webuserid", user.getId());//移动端人员ID - addUser.put("webdeptid", user.getDeptId());//经销商.移动端部门ID - addUser.put("function", "B");//职能 [A:经销商后台, B:经销商销售员] - addUser.put("phone", user.getMobile());//手机号 - addUser.put("createorg", "110");//创建组织.编码 - list.add(addUser); - Map body = new HashMap<>(); - body.put("data", list); - return body; - } } diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/service/TaskHandler.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/service/TaskHandler.java new file mode 100644 index 0000000..6a530a3 --- /dev/null +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/service/TaskHandler.java @@ -0,0 +1,79 @@ +package com.ensign.crm.module.crm.job.service; + +import com.alibaba.fastjson.JSONObject; +import com.ensign.crm.framework.common.enums.CommonStatusEnum; +import com.ensign.crm.module.crm.exception.AllKingdeeException; +import com.ensign.crm.module.crm.service.ProxyService; +import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; +import com.ensign.crm.module.system.dal.mysql.user.AdminUserMapper; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: TODO + * @Date: 2024/10/15 17:02 + * @Created: by ZZSLL + */ + +@Component +@Slf4j +public class TaskHandler { + + @Autowired + private AdminUserMapper userMapper; + @Autowired + private ProxyService proxyService; + + public void syncUser(AdminUserDO user, List errors) throws IOException, URISyntaxException, AllKingdeeException { + Map body = convertToKingdeeObj(user); + log.info("请求body:{}", body); + JSONObject jsonObject = proxyService.doRequestPost("/ierp/kapi/v2/yem/yem_crmbasic/yem_crm_dealeruser/CRM_yem_crm_dealeruser", "POST", body, null); + log.info("响应body:{}", jsonObject); + if (jsonObject.containsKey("status") && jsonObject.containsKey("errorCode")) { + if (jsonObject.getBoolean("status") && jsonObject.getInteger("errorCode") == 0) { + if (jsonObject.containsKey("data")) { + JSONObject dataObject = jsonObject.getJSONObject("data"); + if (dataObject.containsKey("successCount")) { + int successCount = dataObject.getInteger("successCount"); + if (successCount < 1) { + errors.add(user); + log.error("异常数据"); + } + + if (successCount == 1) { + user.setIsSyncKingdee(CommonStatusEnum.ENABLE.getStatus()); + userMapper.updateById(user); + } + } + } + } + } + } + + @NotNull + public static Map convertToKingdeeObj(AdminUserDO user) { + List> list = new ArrayList<>(); + + Map addUser = new HashMap<>(); + addUser.put("number", user.getUsername());//编码 + addUser.put("name", user.getNickname());//经销商销售员 + addUser.put("webuserid", user.getId());//移动端人员ID + addUser.put("webdeptid", user.getDeptId());//经销商.移动端部门ID + addUser.put("function", "E");//职能 [D:经销商后台, E:经销商销售员] + addUser.put("phone", user.getMobile());//手机号 + addUser.put("createorg", "110");//创建组织.编码 + list.add(addUser); + Map body = new HashMap<>(); + body.put("data", list); + return body; + } +} diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/service/ProxyService.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/service/ProxyService.java index 7c37d00..e8f9dc2 100644 --- a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/service/ProxyService.java +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/service/ProxyService.java @@ -13,9 +13,7 @@ import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.client.methods.RequestBuilder; +import org.apache.http.client.methods.*; import org.apache.http.entity.StringEntity; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; @@ -255,7 +253,7 @@ public class ProxyService { return file; } - public JSONObject doRequest(String endpoint, String methodName, Map body, Map header) throws AllKingdeeException, IOException, URISyntaxException { + public JSONObject doRequestPost(String endpoint, String methodName, Map body, Map header) throws AllKingdeeException, IOException, URISyntaxException { log.info("================request kingdee start================"); HttpClient httpClient = HttpClients.createDefault(); @@ -267,29 +265,23 @@ public class ProxyService { throw new AllKingdeeException("unknown request methodName: " + methodName); } - HttpUriRequest request = null; - if (httpMethod == HttpMethod.GET) { - request = RequestBuilder.get(newUri).build(); - } else if (httpMethod == HttpMethod.POST) { - // Assuming body is a JSON object - String jsonBody = JSONUtil.toJsonStr(body); - request = RequestBuilder.post(newUri).setEntity(new StringEntity(jsonBody)).build(); + HttpPost request = new HttpPost(newUri); + if (body != null) { + StringEntity entity = new StringEntity(JSON.toJSONString(body), "UTF-8"); + entity.setContentType("application/json;charset=utf-8"); + request.setEntity(entity); } - // Add headers to the request - if (header != null && request != null) { + if (header != null) { for (Map.Entry entry : header.entrySet()) { request.addHeader(entry.getKey(), entry.getValue().toString()); } } - if (request != null) { - request.addHeader("access_token", initAccessToken()); - request.addHeader("Content-Type", "application/json; charset=utf-8"); - log.info("Requesting: {}", request); - Header[] headers = request.getAllHeaders(); - for (Header hd : headers) { - log.info("header: {}", hd); - } + request.addHeader("access_token", initAccessToken()); + log.info("Requesting: {}", request); + Header[] headers = request.getAllHeaders(); + for (Header hd : headers) { + log.info("header: {}", hd); } HttpResponse response = httpClient.execute(request); diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/event/UserRegisterEvent.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/event/UserRegisterEvent.java new file mode 100644 index 0000000..81cb27d --- /dev/null +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/event/UserRegisterEvent.java @@ -0,0 +1,29 @@ +package com.ensign.crm.module.system.event; + +import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.time.Clock; + +/** + * @Description: TODO + * @Date: 2024/10/15 16:05 + * @Created: by ZZSLL + */ + +@Getter +public class UserRegisterEvent extends ApplicationEvent { + + private final AdminUserDO adminUserDO; + + public UserRegisterEvent(Object source, Clock clock, AdminUserDO adminUserDO) { + super(source, clock); + this.adminUserDO = adminUserDO; + } + + public UserRegisterEvent(Object source, AdminUserDO adminUserDO) { + super(source); + this.adminUserDO = adminUserDO; + } +} diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/event/publisher/UserRegisterEventPublisher.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/event/publisher/UserRegisterEventPublisher.java new file mode 100644 index 0000000..c3fd96f --- /dev/null +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/event/publisher/UserRegisterEventPublisher.java @@ -0,0 +1,29 @@ +package com.ensign.crm.module.system.event.publisher; + +import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; +import com.ensign.crm.module.system.event.UserRegisterEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; + +/** + * @Description: TODO + * @Date: 2024/10/15 16:10 + * @Created: by ZZSLL + */ + + +@Component +@Slf4j +public class UserRegisterEventPublisher { + + @Autowired + public ApplicationEventPublisher publisher; + + public void publish(AdminUserDO user) { + UserRegisterEvent userRegisterEvent = new UserRegisterEvent(this, user); + publisher.publishEvent(userRegisterEvent); + log.info("[UserRegisterEventPublisher] publish event"); + } +} diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionServiceImpl.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionServiceImpl.java index 91fd919..342ac80 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionServiceImpl.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/permission/PermissionServiceImpl.java @@ -378,16 +378,16 @@ public class PermissionServiceImpl implements PermissionService { roles.addAll(UserFunctionRoleEnum.get(1, 2, 3, 4, 5)); break; case 2: - roles.addAll(UserFunctionRoleEnum.get(1, 2, 3, 4)); + roles.addAll(UserFunctionRoleEnum.get(2, 3, 4, 5)); break; case 3: - roles.addAll(UserFunctionRoleEnum.get(1, 2, 3)); + roles.addAll(UserFunctionRoleEnum.get(3, 4, 5)); break; case 4: - roles.addAll(UserFunctionRoleEnum.get(1, 2)); + roles.addAll(UserFunctionRoleEnum.get(4, 5)); break; case 5: - roles.addAll(UserFunctionRoleEnum.get(1)); + roles.addAll(UserFunctionRoleEnum.get(5)); break; } return roles; diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java index 347a436..3203d76 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java @@ -9,7 +9,9 @@ import com.ensign.crm.framework.common.pojo.PageResult; import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; import javax.validation.Valid; +import java.io.IOException; import java.io.InputStream; +import java.net.URISyntaxException; import java.util.*; /** @@ -200,5 +202,4 @@ public interface AdminUserService { * @return 是否匹配 */ boolean isPasswordMatch(String rawPassword, String encodedPassword); - } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java index 43be9fa..c8b3b58 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java @@ -24,6 +24,7 @@ import com.ensign.crm.module.system.dal.dataobject.dept.UserPostDO; import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; import com.ensign.crm.module.system.dal.mysql.dept.UserPostMapper; import com.ensign.crm.module.system.dal.mysql.user.AdminUserMapper; +import com.ensign.crm.module.system.event.publisher.UserRegisterEventPublisher; import com.ensign.crm.module.system.service.dept.DeptService; import com.ensign.crm.module.system.service.dept.PostService; import com.ensign.crm.module.system.service.permission.PermissionService; @@ -33,6 +34,8 @@ import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.service.impl.DiffParseFunction; import com.mzt.logapi.starter.annotation.LogRecord; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -40,7 +43,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.validation.ConstraintViolationException; +import java.io.IOException; import java.io.InputStream; +import java.net.URISyntaxException; import java.time.LocalDateTime; import java.util.*; @@ -84,6 +89,9 @@ public class AdminUserServiceImpl implements AdminUserService { @Resource private ConfigApi configApi; + @Resource + private UserRegisterEventPublisher publisher; + @Override @Transactional(rollbackFor = Exception.class) @LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_CREATE_SUB_TYPE, bizNo = "{{#user.id}}", @@ -112,6 +120,8 @@ public class AdminUserServiceImpl implements AdminUserService { // 3. 记录操作日志上下文 LogRecordContext.putVariable("user", user); + + publisher.publish(user); return user.getId(); } @@ -501,5 +511,4 @@ public class AdminUserServiceImpl implements AdminUserService { private String encodePassword(String password) { return passwordEncoder.encode(password); } - }