Lius
2023-10-30 ff9dc3f8220dfeb9acddd2f86c28718001e70314
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/InspectionProjectController.java
@@ -1,14 +1,26 @@
package org.jeecg.modules.eam.controller;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.eam.entity.InspectionProject;
import org.jeecg.modules.eam.entity.InspectionProjectCategory;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.ImportExcelUtil;
import org.jeecg.modules.base.entity.Unit;
import org.jeecg.modules.base.service.IUnitService;
import org.jeecg.modules.eam.entity.*;
import org.jeecg.modules.eam.service.IInspectionProjectService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -18,8 +30,18 @@
import org.jeecg.modules.eam.service.IInspectionProjectCategoryService;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.eam.vo.InspectionProjectImportVo;
import org.jeecg.modules.system.entity.SysDict;
import org.jeecg.modules.system.entity.SysDictItem;
import org.jeecg.modules.system.service.ISysDictItemService;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -40,6 +62,12 @@
   private IInspectionProjectService inspectionProjectService;
   @Autowired
   private IInspectionProjectCategoryService inspectionProjectCategoryService;
   @Autowired
   private ISysDictService sysDictService;
   @Autowired
   private ISysDictItemService sysDictItemService;
   @Autowired
   private IUnitService unitService;
   /**
    * 分页列表查询
@@ -212,8 +240,123 @@
    */
    //@RequiresPermissions("mom_eam_inspection_project:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, InspectionProject.class);
   @Transactional(rollbackFor = Exception.class)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
      LoginUser user= (LoginUser) SecurityUtils.getSubject().getPrincipal();
      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
      // 错误信息
      List<String> errorMessage = new ArrayList<>();
      int successLines = 0, errorLines = 0;
      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
         MultipartFile file = entity.getValue();
         ImportParams params = new ImportParams();
         params.setNeedSave(true);
         try {
            List<InspectionProjectImportVo> list = ExcelImportUtil.importExcel(file.getInputStream(), InspectionProjectImportVo.class, params);
            for (int i = 0; i < list.size(); i++) {
               InspectionProjectImportVo inspectionProjectImportVo = list.get(i);
               InspectionProject inspectionProject = new InspectionProject();
               InspectionProjectCategory inspectionProjectCategory = inspectionProjectCategoryService.getOne(new QueryWrapper<InspectionProjectCategory>().eq("name", inspectionProjectImportVo.getInspectionProjectCategoryId()), false);
               Unit unit = unitService.getOne(new QueryWrapper<Unit>().eq("name",inspectionProjectImportVo.getUnitId()),false);
               inspectionProject.setInspectionTool(inspectionProjectImportVo.getInspectionTool());
               if (StringUtils.isBlank(inspectionProjectImportVo.getNum())) {
                  errorMessage.add("第" + (i + 1) + "行导入失败,原因:点检项目编码缺失,请填写必填项后再导入;");
                  errorLines++;
                  continue;
               }else {
                  inspectionProject.setNum(inspectionProjectImportVo.getNum());
               }
               if(StringUtils.isBlank(inspectionProjectImportVo.getName())){
                  errorMessage.add("第"+(i+1)+"行导入失败,原因:点检项目名称缺失,请填写必填项后再导入;");
                  errorLines++;
                  continue;
               }else {
                  inspectionProject.setNum(inspectionProjectImportVo.getName());
               }
               if(StringUtils.isBlank(inspectionProjectImportVo.getTestValueType())){
                  errorMessage.add("第"+(i+1)+"行导入失败,原因:检验值类型缺失,请填写必填项后再导入;");
                  errorLines++;
                  continue;
               }else if(CollectionUtils.isEmpty(sysDictItemService.lambdaQuery().eq(SysDictItem::getDictId,sysDictService.lambdaQuery().eq(SysDict::getDictCode,"test_value_type").one().getId()).eq(SysDictItem::getItemText,inspectionProjectImportVo.getTestValueType()).list())){
                  errorMessage.add("第" + (i + 1) + "行导入失败,原因:检验值类型不存在,请先维护检验值类型;");
                  errorLines++;
                  continue;
               }else {
                  inspectionProject.setTestValueType(sysDictItemService.lambdaQuery().eq(SysDictItem::getDictId,sysDictService.lambdaQuery().eq(SysDict::getDictCode,"test_value_type").one().getId()).eq(SysDictItem::getItemText,inspectionProjectImportVo.getInspectionMethod()).one().getItemValue());
               }
               if(ObjectUtils.isNull(inspectionProjectCategory)) {
                  errorMessage.add("第"+(i+1)+"行导入失败,原因:该点检项目分类不存在,请先维护点检项目分类;");
                  errorLines++;
                  continue;
               }else {
                  inspectionProject.setInspectionProjectCategoryId(inspectionProjectCategory.getId());
               }
               if("枚举型".equals(inspectionProjectImportVo.getTestValueType())){
                  if(ObjectUtils.isNull(inspectionProjectImportVo.getDetectionStandard())){
                     errorMessage.add("第"+(i+1)+"行导入失败,原因:检测标准缺失,请填写必填项后再导入;");
                     errorLines++;
                     continue;
                  }else {
                     inspectionProject.setDetectionStandard(inspectionProjectImportVo.getDetectionStandard());
                  }
               }
               if("数值型".equals(inspectionProjectImportVo.getTestValueType())){
                  if(ObjectUtils.isNull(inspectionProjectImportVo.getSurfaceValue())){
                     errorMessage.add("第"+(i+1)+"行导入失败,原因:名义值缺失,请填写必填项后再导入;");
                     errorLines++;
                     continue;
                  }else{
                     inspectionProject.setSurfaceValue(inspectionProjectImportVo.getSurfaceValue());
                  }
                  if(ObjectUtils.isNull(inspectionProjectImportVo.getUpValue())){
                     errorMessage.add("第"+(i+1)+"行导入失败,原因:上偏差缺失,请填写必填项后再导入;");
                     errorLines++;
                     continue;
                  }else{
                     inspectionProject.setUpValue(inspectionProjectImportVo.getUpValue());
                  }
                  if(ObjectUtils.isNull(inspectionProjectImportVo.getDownValue())){
                     errorMessage.add("第"+(i+1)+"行导入失败,原因:下偏差缺失,请填写必填项后再导入;");
                     errorLines++;
                     continue;
                  }else {
                     inspectionProject.setDownValue(inspectionProjectImportVo.getDownValue());
                  }
               }
               if(CollectionUtils.isEmpty(sysDictItemService.lambdaQuery().eq(SysDictItem::getDictId,sysDictService.lambdaQuery().eq(SysDict::getDictCode,"inspection_method").one().getId()).eq(SysDictItem::getItemText,inspectionProjectImportVo.getInspectionMethod()).list())){
                  errorMessage.add("第" + (i + 1) + "行导入失败,原因:点检方法不存在,请先维护点检方法;");
                  errorLines++;
                  continue;
               }else{
                  inspectionProject.setInspectionMethod(sysDictItemService.lambdaQuery().eq(SysDictItem::getDictId,sysDictService.lambdaQuery().eq(SysDict::getDictCode,"inspection_method").one().getId()).eq(SysDictItem::getItemText,inspectionProjectImportVo.getInspectionMethod()).one().getItemValue());
               }
               if(ObjectUtils.isNull(unit)){
                  errorMessage.add("第" + (i + 1) + "行导入失败,原因:计量单位不存在,请先维护计量单位;");
                  errorLines++;
                  continue;
               }else {
                  inspectionProject.setUnitId(unit.getId());
               }
               List<InspectionProject> inspectionProjectList = inspectionProjectService.lambdaQuery().eq(InspectionProject::getNum,inspectionProjectImportVo.getNum()).eq(InspectionProject::getDelFlag,CommonConstant.DEL_FLAG_0).list();
               if(CollectionUtils.isEmpty(inspectionProjectList)){
                  inspectionProjectService.save(inspectionProject);
                  successLines++;
               }
            }
         } catch (Exception e) {
            errorMessage.add("发生异常:" + e.getMessage());
            log.error(e.getMessage(), e);
            return (Result<?>) errorMessage;
         } finally {
            try {
               file.getInputStream().close();
            } catch (IOException e) {
               log.error(e.getMessage(), e);
            }
         }
      }
        return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage);
    }
}