lxw
2023-07-11 b7d5952f03167ee8acbd1c9c9e8f55fb8393367d
src/main/java/com/whyc/service/SOPService.java
@@ -1,11 +1,15 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.Response;
import com.whyc.dto.SopDto;
import com.whyc.mapper.SOPMapper;
import com.whyc.pojo.SOP;
import com.whyc.pojo.SOPFileType;
import com.whyc.pojo.SOPLockLog;
import com.whyc.pojo.SOPProduct;
import com.whyc.util.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
@@ -37,6 +41,9 @@
    @Autowired
    private SOPFileTypeService fileTypeService;
    @Autowired
    private SOPLockLogService sopLockLogService;
    @Transactional
    public Response<Object> excelParse(MultipartFile multipartFile) throws IOException, InvalidFormatException {
@@ -54,7 +61,8 @@
        Sheet sheet = workbook.getSheetAt(0);
        int lastRowNum = sheet.getLastRowNum();
        //文件名
        sop.setFileName(sheet.getRow(2).getCell(2).getStringCellValue());
        String fileName = sheet.getRow(2).getCell(2).getStringCellValue().trim();
        sop.setFileName(fileName);
        //下面的row是动态的,因为文件类型的行数是动态拓展的
        //锚点:文件版本
        int fileVersionIndex = 0;
@@ -231,8 +239,18 @@
        sop.setFileTypeList(fileTypeList);
        sop.setFileType(fileTypeSb.toString());
        sop.setFileVersion(sheet.getRow(fileVersionIndex).getCell(2).getStringCellValue());
        //校验文件版本是否已经存在
        String fileVersion = sheet.getRow(fileVersionIndex).getCell(2).getStringCellValue().trim();
        QueryWrapper<SOP> query = Wrappers.query();
        query.select("file_version").eq("file_name",fileName);
        List<SOP> sopListExists = mapper.selectList(query);
        for (int i = 0; i < sopListExists.size(); i++) {
            SOP sopExists = sopListExists.get(i);
            if(sopExists.getFileVersion().equals(fileVersion)){
                return new Response().set(1,false,"文件版本已存在,请确认SOP版本是否正确!");
            }
        }
        sop.setFileVersion(fileVersion);
        sop.setFileRelatedVersion(sheet.getRow(fileVersionIndex).getCell(7).getStringCellValue());
        sop.setEditor(sheet.getRow(fileVersionIndex+1).getCell(2).getStringCellValue());
@@ -259,6 +277,7 @@
        sop.setReleaseNotes(releaseNotes);
        //第10行开始,倒数第2行截止
        int currentFlag=0;  //通用表示(0:非通用,1:通用)
        for (int i = fileSuitableProductIndex+1; i < lastRowNum; i++) {
            SOPProduct product = new SOPProduct();
            //取第3列,第5列
@@ -279,12 +298,12 @@
            }else{
                product.setModel(model);
            }
            if((code.equals("") && model.equals(""))){
                sop.setCurrentFlag(1);//通用
            if((!code.equals("") && !model.equals(""))){
                currentFlag+=1;
            }
            sopProductList.add(product);
        }
        sop.setCurrentFlag(currentFlag>0?0:1);//通用
        //存储excel文件,/sop_submit/xxx_202306250506.xlsx(改,不存粗excel了)
        /*String originalFilename = multipartFile.getOriginalFilename();
        String[] fileNameSplit = originalFilename.split("\\.");
@@ -302,15 +321,37 @@
    @Transactional
    public Response add(SOP sop,MultipartFile multipartFile) throws IOException {
        //是否存在旧版本,存在则把所有旧版本状态更新为0
        String userName = ActionUtil.getUser().getName();
        Date now = new Date();
        QueryWrapper<SOP> query = Wrappers.query();
        query.eq("file_name",sop.getFileName()).eq("status",1);
        List<SOP> sopListExists = mapper.selectList(query);
        if(sopListExists.size()>0){
            for (SOP sopExists : sopListExists) {
                sopExists.setStatus(0);
                mapper.updateById(sopExists);
                SOPLockLog lockLog = new SOPLockLog();
                lockLog.setSopId(sopExists.getId());
                lockLog.setReason("新版本上传,系统自动锁定旧版本");
                lockLog.setUserName(userName);
                lockLog.setCreateTime(now);
                lockLog.setStatus(0);
                sopLockLogService.insert(lockLog);
            }
        }
        List<SOPProduct> sopProductList = sop.getSopProductList();
         String originalFilename = multipartFile.getOriginalFilename();
        String[] fileNameSplit = originalFilename.split("\\.");
        String dateFormat = DateUtil.YYYY_MM_DD_HH_MM_SS_UNION.format(new Date());
        String dateFormat = DateUtil.YYYY_MM_DD_HH_MM_SS_UNION.format(now);
        String newFileName = fileNameSplit[0]+"_"+dateFormat+"."+fileNameSplit[1];
        String fileUrlTemp = FileUtil.saveFile(multipartFile,"/sop/"+newFileName);
        //String fileUrlTemp = sop.getFileUrl();
        //fileUrlTemp = fileUrlTemp.replace("sop_submit", "sop");
        sop.setFileUrl(fileUrlTemp);
        sop.setStatus(1);
        mapper.insert(sop);
        if(sopProductList.size()>0) {
            sopProductList.forEach(product -> product.setSopId(sop.getId()));
@@ -350,7 +391,6 @@
            List<String> uploadTypeStrList = typeList.stream().map(type -> type.getType1() + ";" + type.getType2()).collect(Collectors.toList());
            List<String> dbTypeStrList = recordListInDB.stream().map(type -> type.getType1() + ";" + type.getType2()).collect(Collectors.toList());
            Date now = new Date();
            for (int i = 0; i < uploadTypeStrList.size(); i++) {
                String uploadTypeStr = uploadTypeStrList.get(i);
                if (!dbTypeStrList.contains(uploadTypeStr)) {
@@ -381,6 +421,8 @@
                }
            }
        }
        //排序
        sqlStr+=" order by create_time desc ";
        List<SOP> list=mapper.getSopInfo(sqlStr,code,model);
        PageInfo pageInfo= PageInfoUtils.list2PageInfo(list,pageCurr,pageSize);
@@ -398,4 +440,26 @@
        }
        return new Response().setII(1,"更新sop说明完成");
    }
    @Transactional
    public Response updateStatusById(SOPLockLog lockLog) {
        Integer id = lockLog.getSopId();
        Integer status = lockLog.getStatus();
        UpdateWrapper<SOP> update = Wrappers.update();
        update.set("status",status).eq("id",id);
        mapper.update(null,update);
        //添加日志
        String name = ActionUtil.getUser().getName();
        lockLog.setUserName(name);
        lockLog.setCreateTime(new Date());
        sopLockLogService.insert(lockLog);
        return new Response().setII(1,"设置完成");
    }
    //查询sop历史
    public Response getSopHis(String fileName) {
        List<SOP> list=mapper.getSopHis(fileName);
        return new Response().setII(1,list.size()>0,list,"查询sop历史");
    }
}