From f1fa213afe8d5b9af4272f6c7dc82917f5baf82f Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 12 七月 2024 15:45:01 +0800
Subject: [PATCH] 提交

---
 server/service/src/main/java/com/doumee/core/utils/Constants.java                   |   45 ++++++++++-----
 server/service/src/main/java/com/doumee/service/business/InitService.java           |    1 
 server/admin/src/main/java/com/doumee/api/business/UsersController.java             |   19 +++++-
 server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java |   57 +++++++++++++++++++
 server/admin/src/main/java/com/doumee/api/business/ShopController.java              |    4 -
 server/service/src/main/java/com/doumee/dao/admin/request/UserImport.java           |   39 +++++++++++++
 server/service/src/main/java/com/doumee/service/business/UsersService.java          |    3 +
 7 files changed, 146 insertions(+), 22 deletions(-)

diff --git a/server/admin/src/main/java/com/doumee/api/business/ShopController.java b/server/admin/src/main/java/com/doumee/api/business/ShopController.java
index 1afee8f..082befb 100644
--- a/server/admin/src/main/java/com/doumee/api/business/ShopController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/ShopController.java
@@ -109,10 +109,6 @@
     })
     @RequiresPermissions("business:shop:create")
     public ApiResponse<String> importExcel (@ApiParam(value = "file") MultipartFile file ) {
-//        Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_SHOP);
-//        if(importing!=null && importing){
-//            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
-//        }
         shopService.importBatch(file);
 //        shopService.dealShopNamePath();
         return ApiResponse.success("鎿嶄綔鎴愬姛");
diff --git a/server/admin/src/main/java/com/doumee/api/business/UsersController.java b/server/admin/src/main/java/com/doumee/api/business/UsersController.java
index 07cc87e..35f85cf 100644
--- a/server/admin/src/main/java/com/doumee/api/business/UsersController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/UsersController.java
@@ -8,13 +8,15 @@
 import com.doumee.core.model.PageData;
 import com.doumee.dao.business.model.Users;
 import com.doumee.service.business.UsersService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import io.swagger.annotations.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
 import javax.servlet.http.HttpServletResponse;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -87,4 +89,15 @@
     public ApiResponse findById(@PathVariable Long id) {
         return ApiResponse.success(usersService.findById(id));
     }
+
+    @ApiOperation(value = "浜哄憳淇℃伅鍒濆鍖栧鍏�" ,notes = "浜哄憳淇℃伅鍒濆鍖栧鍏�")
+    @PostMapping("/importExcel")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+    })
+    @RequiresPermissions("business:users:create")
+    public ApiResponse<String> importExcel (@ApiParam(value = "file") MultipartFile file ) {
+        usersService.importBatch(file);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
 }
diff --git a/server/service/src/main/java/com/doumee/core/utils/Constants.java b/server/service/src/main/java/com/doumee/core/utils/Constants.java
index ef67a07..95372cc 100644
--- a/server/service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -340,25 +340,40 @@
     public static final String WX_SECRET_PERSONNEL = "WX_SECRET_PERSONNEL";
 
 
+    public interface CrmSources{
+
+
+       String SOURCE_DKXD = "DKXD";// 浠e涓嬪崟(DKXD)
+       String SOURCE_LYSJ = "LYSJ";// 闆跺厓璁捐(LYSJ)
+       String SOURCE_ZBSJSQ = "ZBSJSQ";// 蹇楅偊璁捐鐢宠(ZBSJSQ)
+       String SOURCE_ZBDXFX = "ZBDXFX";// 蹇楅偊鐭俊鍒嗕韩(ZBDXFX)
+       String SOURCE_ZBLLJL = "ZBLLJL";// 蹇楅偊娴忚璁板綍鍒嗕韩(ZBLLJL)
+       String SOURCE_ZBWDSC = "ZBWDSC";// 蹇楅偊鎴戠殑鏀惰棌鍒嗕韩(ZBWDSC)
+       String SOURCE_ZBLYSJ = "ZBLYSJ";// 蹇楅偊闆跺厓璁捐(ZBLYSJ)
+       String SOURCE_ZBLDX = "ZBLDX";// 蹇楅偊鑰佸甫鏂�(ZBLDX)
+       String SOURCE_ZBFGCS = "ZBFGCS";// 蹇楅偊椋庢牸娴嬭瘯(ZBFGCS)
+       String SOURCE_ZBJX = "DSLX22";// 蹇楅偊瀹堕��(ZBJX)
+    }
 
     public interface RedisKeys {
-        public static final String IMPORTING_MEMBER ="IMPORTING_MEMBER";
-        public static final String IMPORTING_SHOP ="IMPORTING_SHOP";
-        public static final String IAM_APPID ="IAM_APPID";
-        public static final String ZBOM_CRM_API_KEY ="ZBOM_CRM_API_KEY";
-        public static final String ZBOM_CRM_API_URL ="ZBOM_CRM_API_URL";
-        public static final String ZBOM_SMS_API_KEY ="ZBOM_SMS_API_KEY";
-        public static final String ZBOM_SMS_API_URL ="ZBOM_SMS_API_URL";
-        public static final String IAM_APPKEY ="IAM_APPKEY";
-        public static final String SHOP_TREE ="SHOP_TREE";
-        public static final String ERP_TOKEN ="ERP_TOKEN";
-        public static final long EXPIRE_TIME = 7200;
+       String IMPORTING_MEMBER ="IMPORTING_MEMBER";
+       String IMPORTING_SHOP ="IMPORTING_SHOP";
+       String IMPORTING_USERS ="IMPORTING_USERS";
+       String IAM_APPID ="IAM_APPID";
+       String ZBOM_CRM_API_KEY ="ZBOM_CRM_API_KEY";
+       String ZBOM_CRM_API_URL ="ZBOM_CRM_API_URL";
+       String ZBOM_SMS_API_KEY ="ZBOM_SMS_API_KEY";
+       String ZBOM_SMS_API_URL ="ZBOM_SMS_API_URL";
+       String IAM_APPKEY ="IAM_APPKEY";
+       String SHOP_TREE ="SHOP_TREE";
+       String ERP_TOKEN ="ERP_TOKEN";
+       long EXPIRE_TIME = 7200;
 
-        public static final String INTERNAL_TOKEN ="INTERNAL_TOKEN";
+       String INTERNAL_TOKEN ="INTERNAL_TOKEN";
 
-        public static final String GOODSORDER_KEY = "ordercode_";
-        public static final String ACTIVITY_SIGN_KEY = "actcode_";
-        public static final String AFTERSALE_KEY = "salecode_";
+       String GOODSORDER_KEY = "ordercode_";
+       String ACTIVITY_SIGN_KEY = "actcode_";
+       String AFTERSALE_KEY = "salecode_";
     }
 
 
diff --git a/server/service/src/main/java/com/doumee/dao/admin/request/UserImport.java b/server/service/src/main/java/com/doumee/dao/admin/request/UserImport.java
new file mode 100644
index 0000000..cdc2d9c
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/admin/request/UserImport.java
@@ -0,0 +1,39 @@
+package com.doumee.dao.admin.request;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 缁勭粐淇℃伅瀵煎叆
+ * @author 姹熻箘韫�
+ * @date 2024/01/16 10:03
+ */
+@Data
+@ApiModel("浜哄憳淇℃伅瀵煎叆")
+public class UserImport {
+    @ExcelColumn(name="缂栫爜",value = "orgId",index = 1)
+    private String userId;
+    @ExcelColumn(name="鍚嶇О",value = "name",index = 2)
+    private String name;
+    @ExcelColumn(name="鐧诲綍璐﹀彿",value = "accountNo",index = 3)
+    private String accountNo;
+    @ExcelColumn(name="鐘舵��",value = "status",index =4)
+    private Integer status;
+    @ExcelColumn(name="閭",value = "email",index = 5)
+    private String email;
+    @ExcelColumn(name="鎵嬫満鍙�",value = "phone",index = 6)
+    private String phone;
+    @ExcelColumn(name="宸ュ彿",value = "code",index = 7)
+    private String code;
+    @ExcelColumn(name="鐢ㄦ埛绫诲瀷缂栫爜闆嗗悎,澶氫釜鑻辨枃閫楀彿闅斿紑",value = "typeCodes",index = 8)
+    private String typeCodes;
+    @ExcelColumn(name="閮ㄩ棬缂栫爜闆嗗悎,澶氫釜鑻辨枃閫楀彿闅斿紑",value = "orgIds",index = 9)
+    private String orgIds;
+    @ExcelColumn(name="瑙掕壊缂栫爜闆嗗悎,澶氫釜鑻辨枃閫楀彿闅斿紑",value = "roleIds",index = 10)
+    private String roleIds;
+    @ExcelColumn(name="瑙掕壊code闆嗗悎,澶氫釜鑻辨枃閫楀彿闅斿紑",value = "roleCodes",index = 11)
+    private String roleCodes;
+    @ExcelColumn(name="瑙掕壊鍚嶇О闆嗗悎,澶氫釜鑻辨枃閫楀彿闅斿紑",value = "roleNames",index = 12)
+    private String roleNames;
+}
diff --git a/server/service/src/main/java/com/doumee/service/business/InitService.java b/server/service/src/main/java/com/doumee/service/business/InitService.java
index b8660df..cfea56d 100644
--- a/server/service/src/main/java/com/doumee/service/business/InitService.java
+++ b/server/service/src/main/java/com/doumee/service/business/InitService.java
@@ -31,6 +31,7 @@
     @PostConstruct
     public void clearImporting(){
         redisTemplate.delete(Constants.RedisKeys.IMPORTING_SHOP);
+        redisTemplate.delete(Constants.RedisKeys.IMPORTING_USERS);
     }
     @PostConstruct
     public void initIamAppIdAndAppKey(){
diff --git a/server/service/src/main/java/com/doumee/service/business/UsersService.java b/server/service/src/main/java/com/doumee/service/business/UsersService.java
index 894d3f4..e31e89b 100644
--- a/server/service/src/main/java/com/doumee/service/business/UsersService.java
+++ b/server/service/src/main/java/com/doumee/service/business/UsersService.java
@@ -4,6 +4,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Users;
 import com.doumee.dao.web.response.AccountResponse;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -102,4 +103,6 @@
     AccountResponse wxLogin(String code);
 
     void bindingOpenid(String code,Long userId);
+
+    String importBatch(MultipartFile file);
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
index 7d1c818..d1e1e8c 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -4,12 +4,16 @@
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.config.Jwt.JwtPayLoad;
 import com.doumee.config.Jwt.JwtTokenUtil;
+import com.doumee.core.annotation.excel.ExcelImporter;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.admin.request.ShopImport;
+import com.doumee.dao.admin.request.UserImport;
 import com.doumee.dao.business.ShopMapper;
 import com.doumee.core.wx.WxMiniConfig;
 import com.doumee.dao.business.UsersMapper;
@@ -30,14 +34,21 @@
 import org.apache.commons.lang3.StringUtils;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * 鍛樺伐淇℃伅琛⊿ervice瀹炵幇
@@ -47,6 +58,10 @@
 @Service
 public class UsersServiceImpl implements UsersService {
 
+
+    ExecutorService executor = Executors.newFixedThreadPool(1);
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
     @Autowired
     private UsersMapper usersMapper;
     @Autowired
@@ -356,4 +371,46 @@
             e.printStackTrace();
         }
     }
+
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public String importBatch(MultipartFile file){
+        Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_USERS);
+        if(importing!=null && importing){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ鍏ユ垨鑰呬笂涓嬬骇閲嶇疆浠诲姟姝e湪鎵ц涓紝璇风◢鍚庡啀璇曪紒");
+        }
+        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_USERS,true);
+        try {
+            LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+            ExcelImporter ie = null;
+            List<UserImport> dataList =null;
+            try {
+                ie = new ExcelImporter(file,0,0);
+                dataList = ie.getDataList(UserImport.class,null);
+            }  catch (Exception e) {
+                e.printStackTrace();
+            }
+            if(dataList == null || dataList.size() ==0){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+            }
+            Date date =new Date();
+            List<UserImport> finalDataList = dataList;
+            Callable<String> task = () -> {
+                dealUserDataBiz(finalDataList,date,loginUserInfo);
+                return "寮傛浠诲姟瀹屾垚";
+            };
+            executor.submit(task);
+
+            return "瀵煎叆鎴愬姛";
+        }catch (BusinessException e){
+            throw e;
+        }catch (Exception e){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"淇℃伅瀵煎叆澶辫触锛岃绋嶅悗閲嶈瘯");
+        }
+    }
+
+    private void dealUserDataBiz(List<UserImport> finalDataList, Date date, LoginUserInfo loginUserInfo) {
+
+    }
+
 }

--
Gitblit v1.9.3