Procházet zdrojové kódy

新增导入Excel更新用户手机号并记录成功失败情况

王苗苗 před 1 měsícem
rodič
revize
202c6f7e80

+ 21 - 0
slibra-admin/src/main/java/com/slibra/web/controller/business/ExcelController.java

@@ -8,6 +8,7 @@ import com.slibra.business.req.AiChatReq;
 import com.slibra.business.req.AiChatRes;
 import com.slibra.business.res.BZXQLHInfo;
 import com.slibra.business.res.MoreExcelInfo;
+import com.slibra.business.res.UpdateUserExcelInfo;
 import com.slibra.business.res.UserExcelInfo;
 import com.slibra.business.service.IFrontService;
 import com.slibra.common.core.controller.BaseController;
@@ -18,6 +19,7 @@ import com.slibra.common.exception.ServiceException;
 import com.slibra.common.utils.StringUtils;
 import com.slibra.common.utils.poi.ExcelUtil;
 import com.slibra.web.controller.listener.MoreDataListener;
+import com.slibra.web.controller.listener.UpdateUserDataListener;
 import com.slibra.web.controller.listener.UserDataListener;
 import io.micrometer.core.annotation.Timed;
 import lombok.extern.slf4j.Slf4j;
@@ -30,10 +32,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.nio.file.Files;
 import java.util.List;
 import java.util.Map;
@@ -276,6 +280,23 @@ public class ExcelController extends BaseController {
      *
      *
      */
+    @PostMapping(value = "/updateUserInfoFromExcel")
+    public R<String> upLoadImage(@RequestParam("file") MultipartFile file) {
+        if (file.isEmpty())
+            throw new ServiceException("请上传Excel文件!");
+        SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
+        TUserInfoMapper sqlSessionMapper = sqlSession.getMapper(TUserInfoMapper.class);
+        TImportFailMapper failMapper = sqlSession.getMapper(TImportFailMapper.class);
+        // 读取Excel文件
+        try {
+            EasyExcel.read(file.getInputStream(), UpdateUserExcelInfo.class, new UpdateUserDataListener(sqlSession, sqlSessionMapper, failMapper))
+                    .sheet() // 读取第一个工作表
+                    .doRead(); // 触发实际的读取操作
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return R.ok("上传成功");
+    }
 
 
 

+ 101 - 0
slibra-admin/src/main/java/com/slibra/web/controller/listener/UpdateUserDataListener.java

@@ -0,0 +1,101 @@
+package com.slibra.web.controller.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.fastjson2.JSON;
+import com.slibra.business.domain.TImportFail;
+import com.slibra.business.domain.TUserInfo;
+import com.slibra.business.mapper.TImportFailMapper;
+import com.slibra.business.mapper.TUserInfoMapper;
+import com.slibra.business.res.UpdateUserExcelInfo;
+import com.slibra.business.res.UserExcelInfo;
+import com.slibra.common.utils.DateUtils;
+import com.slibra.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.tomcat.Jar;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+@Component
+@Slf4j
+public class UpdateUserDataListener extends AnalysisEventListener<UpdateUserExcelInfo> {
+
+    SqlSession sqlSession;
+    TUserInfoMapper tUserInfoMapper;
+    TImportFailMapper tImportFailMapper;
+
+    //成功数量
+    private int successNum = 0;
+
+    //失败数量
+    private int failNum = 0;
+
+    //失败数据列表
+    private List<UpdateUserExcelInfo> failList = new ArrayList<>();
+
+    @Override
+    public void invoke(UpdateUserExcelInfo userExcelInfo, AnalysisContext context) {
+        //查询 如果2个有一个为空的,就标记为错误
+        String userNo = userExcelInfo.getUserNo();
+        String phone = userExcelInfo.getPhone();
+        if(StringUtils.isBlank(userNo) || StringUtils.isBlank(phone)){
+            log.info("存在为空的数据,无法更新");
+            failNum ++;
+            failList.add(userExcelInfo);
+            return;
+        }
+        //都存在
+        //通过编号查询用户数据,如果存在就更新并记录成功数量,不存在标记错误。
+        List<TUserInfo> tUserInfos = this.tUserInfoMapper.selectTUserInfoList(TUserInfo.builder().userNo(userNo).build());
+        if(CollectionUtils.isEmpty(tUserInfos)){
+            log.info("通过用户编号未查询到用户明细");
+            failNum ++;
+            failList.add(userExcelInfo);
+        }else {
+            TUserInfo tUserInfo = tUserInfos.get(0);
+            tUserInfo.setPhone(phone);
+            this.tUserInfoMapper.updateTUserInfo(tUserInfo);
+            successNum++;
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        // 所有数据读取完毕后的处理逻辑
+        log.info("所有数据读取完毕");
+        Date nowDate = DateUtils.getNowDate();
+
+        //记录失败数据情况
+        TImportFail tImportFail = new TImportFail();
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("time", DateUtils.getTime());
+        map.put("failNum", failNum);
+        map.put("successNum", successNum);
+        map.put("failList", failList);
+        tImportFail.setContent(JSON.toJSONString(map));
+        tImportFail.setCreateTime(nowDate);
+        tImportFail.setCreateBy("system");
+        this.tImportFailMapper.insertTImportFail(tImportFail);
+        sqlSession.commit();
+        sqlSession.close();
+    }
+
+    public UpdateUserDataListener() {
+    }
+
+
+    public UpdateUserDataListener(SqlSession sqlSession, TUserInfoMapper tUserInfoMapper, TImportFailMapper tImportFailMapper) {
+        this.sqlSession = sqlSession;
+        this.tUserInfoMapper = tUserInfoMapper;
+        this.tImportFailMapper = tImportFailMapper;
+    }
+
+
+
+}

+ 31 - 0
slibra-system/src/main/java/com/slibra/business/res/UpdateUserExcelInfo.java

@@ -0,0 +1,31 @@
+package com.slibra.business.res;
+
+import com.slibra.common.annotation.Excel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 用户信息对象 t_user_info
+ * 
+ * @author slibra
+ * @date 2024-11-06
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateUserExcelInfo
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 用户编号 */
+    @Excel(name = "用户编号")
+    private String userNo = "";
+
+    /** 用户手机号 */
+    @Excel(name = "用户手机号")
+    private String phone = "";
+
+}