浏览代码

导入新增更新研究中心

yurk 3 年之前
父节点
当前提交
95a28221e2

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java

@@ -9,10 +9,12 @@ import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.ReportExtraDegreeMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ProjectService;
+import com.management.platform.service.ReportExtraDegreeService;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.poi.util.StringUtil;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -42,6 +44,8 @@ public class ReportExtraDegreeController {
     ProjectMapper projectMapper;
     @Resource
     ProjectService projectService;
+    @Resource
+    ReportExtraDegreeService reportExtraDegreeService;
 
     /**
      * addOrMod添加或者修改
@@ -145,5 +149,9 @@ public class ReportExtraDegreeController {
         msg.data = all;
         return msg;
     }
+    @RequestMapping("/importData")
+    public HttpRespMsg importData(HttpServletRequest request, MultipartFile file){
+       return reportExtraDegreeService.importData(request,file);
+    }
 }
 

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportExtraDegreeService.java

@@ -2,6 +2,10 @@ package com.management.platform.service;
 
 import com.management.platform.entity.ReportExtraDegree;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ReportExtraDegreeService extends IService<ReportExtraDegree> {
 
+    HttpRespMsg importData(HttpServletRequest request, MultipartFile file);
 }

+ 97 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportExtraDegreeServiceImpl.java

@@ -1,10 +1,29 @@
 package com.management.platform.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.ReportExtraDegree;
 import com.management.platform.mapper.ReportExtraDegreeMapper;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ReportExtraDegreeService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.util.ExcelUtil;
+import com.management.platform.util.HttpRespMsg;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -16,5 +35,82 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class ReportExtraDegreeServiceImpl extends ServiceImpl<ReportExtraDegreeMapper, ReportExtraDegree> implements ReportExtraDegreeService {
+    @Resource
+    ReportExtraDegreeMapper reportExtraDegreeMapper;
+    @Resource
+    UserMapper userMapper;
+    @Override
+    public HttpRespMsg importData(HttpServletRequest request, MultipartFile multipartFile) {
+        HttpRespMsg msg=new HttpRespMsg();
+        String fileName=multipartFile.getOriginalFilename();
+        File file=new File(fileName == null?"file":fileName);
+        InputStream inputStream=null;
+        OutputStream outputStream=null;
+        Integer companyId=userMapper.selectById(request.getHeader("token")).getCompanyId();
+        try {
+            inputStream= multipartFile.getInputStream();
+            outputStream=new FileOutputStream(file);
+            byte[] buffer = new byte[4096];
+            int temp = 0;
+            while ((temp = inputStream.read(buffer, 0, 4096)) != -1) {
+                outputStream.write(buffer, 0, temp);
+            }
+            inputStream.close();
+            outputStream.close();
 
+            //然后解析表格
+            Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
+            DateFormat df = new SimpleDateFormat("yyyy-MM");
+            //获取公司所有客户
+            List<ReportExtraDegree> allReportExtraDegree = reportExtraDegreeMapper.selectList(new QueryWrapper<ReportExtraDegree>().eq("company_id", companyId));
+            Sheet sheet = workbook.getSheetAt(0);
+            //由于第一行需要指明列对应的标题
+            int rowNum = sheet.getLastRowNum();
+            if (rowNum == 0) {
+                msg.setError("请填写研究中心数据");
+                return msg;
+            }
+            List<String> nameList=new ArrayList<>();
+            int dataCount = 0;
+            for (int rowIndex = 1; rowIndex <= rowNum; rowIndex++) {
+                Row row = sheet.getRow(rowIndex);
+                dataCount++;
+                if (row == null) {
+                    continue;
+                }
+                if (ExcelUtil.isRowEmpty(row)) {
+                    continue;
+                }
+                if (row.getCell(0) == null) {
+                    msg.setError("第"+dataCount+"行缺少中心名称");
+                    return msg;
+                }
+                if(nameList.contains(row.getCell(0).toString())){
+                    msg.setError("当前导入数据存在重复中心名称["+row.getCell(1).toString()+"]");
+                    return msg;
+                }
+                nameList.add(row.getCell(0).toString());
+                ReportExtraDegree reportExtraDegree=new ReportExtraDegree();
+                List<ReportExtraDegree> collect = allReportExtraDegree.stream().filter(ap -> ap.getName().equals(row.getCell(0).toString())).collect(Collectors.toList());
+                reportExtraDegree.setName(row.getCell(0).toString());
+                reportExtraDegree.setCompanyId(companyId);
+                if(collect.size()>0){
+                    Integer id=collect.get(0).getId();
+                    reportExtraDegree.setId(id);
+                    reportExtraDegreeMapper.updateById(reportExtraDegree);
+                }else{
+                    reportExtraDegreeMapper.insert(reportExtraDegree);
+                }
+            }
+            msg.data=dataCount;
+            return msg;
+        } catch (IOException e){
+            e.printStackTrace();
+            msg.setError("文件处理出错");
+            return msg;
+        } catch (InvalidFormatException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 65 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/centerManage/centerManage.vue

@@ -4,6 +4,7 @@
             <el-form :inline="true">
                 <el-form-item label="研究中心管理">
                 </el-form-item>
+                <el-link type="primary" :underline="false" @click="intoCenterRatio" class="tanjia">批量导入研究中心</el-link>
                 <el-link icon="el-icon-circle-plus-outline" type="primary" :underline="false" class="tanjia" @click="addNewSubProject()">添加研究中心</el-link>
             </el-form>
         </el-col>
@@ -32,6 +33,27 @@
                 <el-button type="primary" @click="submitInsertSubProject" :loading="addLoading">提交</el-button>
             </div>
         </el-dialog>
+        <!-- 导入结果说明 -->
+        <el-dialog title="分摊比例导入结果" v-if="showImportResult" :visible.sync="showImportResult" customClass="customWidth" width="500px">
+            <div>
+                <span>{{importResultMsg}}</span>
+                
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="showImportResult=false">确定</el-button>
+            </span>
+        </el-dialog>
+        <el-dialog title="导入研究中心数据" v-if="intoCenterDialog" :visible.sync="intoCenterDialog" customClass="customWidth" width="500px">
+            <p>1. 下载
+            <el-link type="primary" style="margin-left:5px;" :underline="false" href="./upload/研究中心导入模板.xlsx" download="研究中心导入模板.xlsx">研究中心导入模板.xlsx</el-link>
+            </p>
+            <!-- <p>2. 填写excel模板,请确保模板中的项目和人员已添加到系统中。</p> -->
+            <p style="display: flex;justify-content: center;padding:1em 0">
+                <el-upload ref="upload"  action="#" :limit="1" :http-request="batchImportData" :show-file-list="false">
+                <el-button type="primary" :underline="false" :loading="importingData">开始导入</el-button>
+            </el-upload>
+            </p>
+        </el-dialog>
     </section>
 </template>
 <script>
@@ -48,9 +70,52 @@
                     name: [{ required: true, message: "请输入名称", trigger: "blur" }],
                 },
                 heightDoms: document.documentElement.clientHeight - 140,
+                intoCenterDialog:false,
+                importingData: false,
+                importResultMsg:null,
+                showImportResult:false,
             };
         },
         methods: {
+             intoCenterRatio(){
+                this.intoCenterDialog=true;
+            },
+            batchImportData(item) {
+                //首先判断文件类型
+                let str = item.file.name.split(".");
+                let format = str[str.length - 1];
+                if (format != "xls" && format != "xlsx") {
+                    this.$message({
+                        message: "请选择.xls或.xlsx文件",
+                        type: "error"
+                    });
+                } else {
+                    this.importingData = true;
+                    let formData = new FormData();
+                    formData.append("file", item.file);  
+                    this.http.uploadFile('/report-extra-degree/importData', formData,
+                    res => {
+                        this.$refs.upload.clearFiles();
+                        this.importingData = false;
+                        this.showImportResult = true;
+                        if (res.code == "ok") {
+                            //换成弹出框,以免有人等了半天回来啥也没看到
+                            this.importResultMsg = "成功导入/更新"+res.data+"条客户数据。"+(res.msg?res.msg:"");
+                            this.getSub();
+                        } else {
+                            this.importResultMsg = "导入失败:"+res.msg;
+                        }
+                    },
+                    error => {
+                        this.$refs.upload.clearFiles();
+                        this.importingData = false;
+                        this.$message({
+                            message: error,
+                            type: "error"
+                        });
+                    });
+                }
+            },
             getSub() {
                 this.listLoading = true;
                 this.http.post('/report-extra-degree/getAll ',{},

+ 1 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/customer/list.vue

@@ -208,8 +208,7 @@
                     this.importingData = true;
                     let formData = new FormData();
                     formData.append("file", item.file);
-                    formData.append("companyId", this.user.companyId);
-                    this.http.uploadFile('//customer-info/importData', formData,
+                    this.http.uploadFile('/customer-info/importData', formData,
                     res => {
                         this.$refs.upload.clearFiles();
                         this.importingData = false;