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("æä½æå"); 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 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("æä½æå"); } } 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";// 代客ä¸å(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_"; } 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; } 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(){ 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); } 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; /** * å工信æ¯è¡¨Serviceå®ç° @@ -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(),"对ä¸èµ·ï¼å·²åå¨å¯¼å ¥æè ä¸ä¸çº§éç½®ä»»å¡æ£å¨æ§è¡ä¸ï¼è¯·ç¨ååè¯ï¼"); } 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) { } }