| | |
| | | package com.whyc.service; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | 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.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.mapper.DeviceSpareMapper; |
| | | import com.whyc.pojo.web_site.DeviceSpare; |
| | | import com.whyc.pojo.web_site.DeviceSpareLog; |
| | | import com.whyc.util.CommonUtil; |
| | | import com.whyc.util.ThreadLocalUtil; |
| | | import org.apache.commons.lang.StringUtils; |
| | | import org.apache.poi.openxml4j.opc.OPCPackage; |
| | | import org.apache.poi.ss.usermodel.*; |
| | | import org.apache.poi.xssf.usermodel.*; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.File; |
| | | import java.io.FileOutputStream; |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Service |
| | |
| | | @Resource |
| | | private DeviceSpareMapper mapper; |
| | | |
| | | @Autowired |
| | | private DeviceSpareLogService deviceSpareLogService; |
| | | |
| | | public Response<PageInfo<DeviceSpare>> getPage(Integer pageNum, Integer pageSize, String type, String name) { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | QueryWrapper<DeviceSpare> query = Wrappers.query(); |
| | |
| | | List<DeviceSpare> deviceSpares = mapper.selectList(query); |
| | | return new Response<PageInfo<DeviceSpare>>().set(1, new PageInfo<>(deviceSpares)); |
| | | } |
| | | |
| | | public Response<List<DeviceSpare>> getList(String name) { |
| | | QueryWrapper<DeviceSpare> query = Wrappers.query(); |
| | | query.eq(StringUtils.isNotBlank(name), "name", name); |
| | | return new Response<List<DeviceSpare>>().set(1, mapper.selectList(query)); |
| | | } |
| | | |
| | | @Transactional |
| | | public Response add(DeviceSpare spare, List<MultipartFile> file) throws IOException { |
| | | //对file进行处理,保存到文件夹中 |
| | | //对存储路径进行定义 |
| | | Date now = new Date(); |
| | | String timeFormat = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM_DD_HH_MM_SS_UNION, now); |
| | | String dirMonth = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM, now); |
| | | String fileDirPath = CommonUtil.getRootFile() + "deviceSpare" + File.separator + dirMonth; |
| | | File fileDir = new File(fileDirPath); |
| | | //如果文件夹不存在则创建 |
| | | if (!fileDir.exists()) { |
| | | fileDir.mkdirs(); |
| | | } |
| | | StringBuilder pictureUrlSb = new StringBuilder(); |
| | | if (file != null && file.size() > 0) { |
| | | for (int i = 0; i < file.size(); i++) { |
| | | MultipartFile multipartFile = file.get(i); |
| | | String fileName = multipartFile.getOriginalFilename(); |
| | | //将fileName中可能存在的,去掉 |
| | | fileName = fileName.replace(",",""); |
| | | String filePath = fileDirPath + File.separator + timeFormat+"_"+fileName; |
| | | |
| | | multipartFile.transferTo(new File(filePath)); |
| | | String split = "pis_file"+File.separator+"deviceSpare"; |
| | | String picUrl = File.separator + filePath.substring(filePath.indexOf(split)); |
| | | if(i == file.size()-1) { |
| | | pictureUrlSb.append(picUrl); |
| | | }else { |
| | | pictureUrlSb.append(picUrl).append(","); |
| | | } |
| | | } |
| | | } |
| | | spare.setPictureUrl(pictureUrlSb.toString()); |
| | | mapper.insert(spare); |
| | | |
| | | //变更日志 |
| | | DeviceSpareLog deviceSpareLog = new DeviceSpareLog(); |
| | | deviceSpareLog.setDeviceSpareId(spare.getId()); |
| | | deviceSpareLog.setCreateTime(now); |
| | | deviceSpareLog.setOperationType(1); |
| | | |
| | | StringBuilder detailSb = new StringBuilder(); |
| | | detailSb.append("新增物料类型,"); |
| | | detailSb.append("物料名称:").append(spare.getName()).append(","); |
| | | detailSb.append("物料型号:").append(spare.getModel()).append(","); |
| | | detailSb.append("物料版本:").append(spare.getVersion()).append(","); |
| | | detailSb.append("物料品牌:").append(spare.getBrand()).append(","); |
| | | detailSb.append("物料数量:").append(spare.getQuantity()).append(","); |
| | | detailSb.append("物料类型:").append(spare.getType()).append(","); |
| | | detailSb.append("物料供应商:").append(spare.getSupplier()); |
| | | deviceSpareLog.setOperationDetail(detailSb.toString()); |
| | | |
| | | deviceSpareLogService.add(deviceSpareLog); |
| | | |
| | | |
| | | |
| | | return new Response().setII(1,"新增完成"); |
| | | } |
| | | |
| | | @Transactional |
| | | public Response update(DeviceSpare spare) { |
| | | //根据id查询数据库中的物料 |
| | | DeviceSpare spareInDB = mapper.selectById(spare.getId()); |
| | | //对比每个字段是否一样,不一样的记录下来 |
| | | DeviceSpareLog deviceSpareLog = new DeviceSpareLog(); |
| | | deviceSpareLog.setDeviceSpareId(spare.getId()); |
| | | deviceSpareLog.setCreateTime(new Date()); |
| | | deviceSpareLog.setOperationType(2); |
| | | |
| | | StringBuilder detailSb = new StringBuilder(); |
| | | detailSb.append("修改物料,"); |
| | | if (!spareInDB.getName().equals(spare.getName())) { |
| | | detailSb.append("物料名称:").append(spareInDB.getName()).append("->").append(spare.getName()).append(","); |
| | | } |
| | | if (!spareInDB.getModel().equals(spare.getModel())) { |
| | | detailSb.append("物料型号:").append(spareInDB.getModel()).append("->").append(spare.getModel()).append(","); |
| | | } |
| | | if (!spareInDB.getVersion().equals(spare.getVersion())) { |
| | | detailSb.append("物料版本:").append(spareInDB.getVersion()).append("->").append(spare.getVersion()).append(","); |
| | | } |
| | | if (!spareInDB.getBrand().equals(spare.getBrand())) { |
| | | detailSb.append("物料品牌:").append(spareInDB.getBrand()).append("->").append(spare.getBrand()).append(","); |
| | | } |
| | | if (!spareInDB.getQuantity().equals(spare.getQuantity())) { |
| | | detailSb.append("物料数量:").append(spareInDB.getQuantity()).append("->").append(spare.getQuantity()).append(","); |
| | | } |
| | | if (!spareInDB.getType().equals(spare.getType())) { |
| | | detailSb.append("物料类型:").append(spareInDB.getType()).append("->").append(spare.getType()).append(","); |
| | | } |
| | | if (!spareInDB.getSupplier().equals(spare.getSupplier())) { |
| | | detailSb.append("物料供应商:").append(spareInDB.getSupplier()).append("->").append(spare.getSupplier()).append(","); |
| | | } |
| | | //detailSb去除最后一个逗号 |
| | | detailSb.deleteCharAt(detailSb.length()-1); |
| | | deviceSpareLog.setOperationDetail(detailSb.toString()); |
| | | deviceSpareLogService.add(deviceSpareLog); |
| | | |
| | | mapper.updateById(spare); |
| | | return new Response().setII(1,"修改完成"); |
| | | } |
| | | |
| | | public Response delete(Integer id) { |
| | | mapper.deleteById(id); |
| | | return new Response().setII(1,"删除完成"); |
| | | } |
| | | |
| | | public Response<List<DeviceSpare>> getListByIds(String deviceSpareIds) { |
| | | QueryWrapper<DeviceSpare> query = Wrappers.query(); |
| | | query.in("id",deviceSpareIds.split(",")); |
| | | List<DeviceSpare> deviceSpares = mapper.selectList(query); |
| | | return new Response<List<DeviceSpare>>().set(1,deviceSpares); |
| | | } |
| | | |
| | | public void addBatch(List<DeviceSpare> spareList) { |
| | | mapper.insertBatchSomeColumn(spareList); |
| | | } |
| | | |
| | | public void addOrUpdate(List<DeviceSpare> spareList) { |
| | | //查询库中是否存在该设备,存在则增加数量. |
| | | for (DeviceSpare spare : spareList) { |
| | | QueryWrapper<DeviceSpare> query = Wrappers.query(); |
| | | query.eq("name",spare.getName()); |
| | | query.eq("model",spare.getModel()); |
| | | query.eq("version",spare.getVersion()); |
| | | query.eq("brand",spare.getBrand()); |
| | | query.eq("type",spare.getType()); |
| | | query.eq("supplier",spare.getSupplier()); |
| | | query.last(" limit 1"); |
| | | DeviceSpare spareInDB = mapper.selectOne(query); |
| | | if(spareInDB != null){ |
| | | spareInDB.setQuantity(spareInDB.getQuantity()+spare.getQuantity()); |
| | | mapper.updateById(spareInDB); |
| | | |
| | | }else{ |
| | | //不存在则新增 |
| | | mapper.insert(spare); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | public void outBound(List<DeviceSpare> spareList) { |
| | | mapper.outBound(spareList); |
| | | } |
| | | |
| | | public Response addByExcel(MultipartFile file) throws IOException { |
| | | //将文件流转化为workbook |
| | | Workbook book = WorkbookFactory.create(file.getInputStream()); |
| | | Sheet sheet = book.getSheetAt(0); |
| | | //获取最后一行 |
| | | int lastRowIndex = sheet.getLastRowNum(); |
| | | List<DeviceSpare> spareList = new ArrayList<>(); |
| | | for (int i = 1; i <= lastRowIndex; i++) { |
| | | DeviceSpare spare = new DeviceSpare(); |
| | | Row row = sheet.getRow(i); |
| | | //对每行的前7列进行非空校验 |
| | | for (int j = 0; j < 7; j++) { |
| | | Cell cell = row.getCell(j); |
| | | //非图片列进行非空校验.不合规无法上传 |
| | | if (cell == null || cell.getCellType() == CellType.BLANK) { |
| | | return new Response().set(1, false, "第" + (i + 1) + "行第" + (j + 1) + "列数据为空"); |
| | | } |
| | | } |
| | | //获取列的值 |
| | | String name = row.getCell(0).getStringCellValue(); |
| | | String model = row.getCell(1).getStringCellValue(); |
| | | String version = row.getCell(2).getStringCellValue(); |
| | | int quantity = (int) row.getCell(3).getNumericCellValue(); |
| | | String brand = row.getCell(4).getStringCellValue(); |
| | | String type = row.getCell(5).getStringCellValue(); |
| | | String supplier = row.getCell(6).getStringCellValue(); |
| | | spare.setName(name); |
| | | spare.setModel(model); |
| | | spare.setVersion(version); |
| | | spare.setQuantity(quantity); |
| | | spare.setBrand(brand); |
| | | spare.setType(type); |
| | | spare.setSupplier(supplier); |
| | | |
| | | spareList.add(spare); |
| | | |
| | | } |
| | | |
| | | //第七列为图片-浮动式图片 TODO 待处理 处理已存在的物料 |
| | | //获取绘图对象中的所有图形 |
| | | XSSFDrawing drawing = (XSSFDrawing) sheet.getDrawingPatriarch(); |
| | | if (drawing == null) { |
| | | drawing = (XSSFDrawing) sheet.createDrawingPatriarch(); |
| | | } |
| | | List<XSSFShape> shapes = drawing.getShapes(); |
| | | for (XSSFShape shape : shapes) { |
| | | if (shape instanceof XSSFPicture) { |
| | | XSSFPicture pic = (XSSFPicture) shape; |
| | | XSSFClientAnchor anchor = pic.getClientAnchor(); |
| | | //获取图片所在的起始行 |
| | | int rowIndex = anchor.getRow1(); |
| | | byte[] data = pic.getPictureData().getData(); |
| | | |
| | | DeviceSpare spare = spareList.get(rowIndex - 1); |
| | | //对存储路径进行定义 |
| | | Date now = new Date(); |
| | | String timeFormat = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM_DD_HH_MM_SS_UNION, now); |
| | | String dirMonth = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM, now); |
| | | String fileDirPath = CommonUtil.getRootFile() + "deviceSpare" + File.separator + dirMonth; |
| | | File fileDir = new File(fileDirPath); |
| | | //如果文件夹不存在则创建 |
| | | if (!fileDir.exists()) { |
| | | fileDir.mkdirs(); |
| | | } |
| | | String filePath = fileDirPath + File.separator + timeFormat+"_"+spare.getName()+"_"+spare.getModel()+"_"+spare.getVersion()+".png"; |
| | | |
| | | // 保存图片到本地 |
| | | try (FileOutputStream fos = new FileOutputStream(filePath)) { |
| | | fos.write(data); |
| | | } |
| | | String split = "pis_file"+File.separator+"deviceSpare"; |
| | | String picUrl = File.separator + filePath.substring(filePath.indexOf(split)); |
| | | spare.setPictureUrl(picUrl); |
| | | } |
| | | } |
| | | |
| | | //新增列表 |
| | | List<DeviceSpare> spareListNew = new ArrayList<>(); |
| | | //更新列表 |
| | | List<DeviceSpare> spareListUpdate = new ArrayList<>(); |
| | | //查询库中的所有设备器件 |
| | | List<DeviceSpare> deviceSpareListInDB = mapper.selectList((Wrapper<DeviceSpare>) CommonUtil.nullObject); |
| | | for (DeviceSpare spare : spareList){ |
| | | for (DeviceSpare spareInDB : deviceSpareListInDB){ |
| | | if (spare.getName().equals(spareInDB.getName()) |
| | | && spare.getModel().equals(spareInDB.getModel()) |
| | | && spare.getVersion().equals(spareInDB.getVersion()) |
| | | && spare.getBrand().equals(spareInDB.getBrand()) |
| | | && spare.getType().equals(spareInDB.getType()) |
| | | && spare.getSupplier().equals(spareInDB.getSupplier()) |
| | | ){ |
| | | spare.setId(spareInDB.getId()); |
| | | spare.setQuantity(spareInDB.getQuantity()+spare.getQuantity()); |
| | | if (spare.getPictureUrl() != null && spareInDB.getPictureUrl()!=null){ |
| | | spare.setPictureUrl(spareInDB.getPictureUrl()+","+spare.getPictureUrl()); |
| | | } |
| | | spareListUpdate.add(spare); |
| | | |
| | | }else{ |
| | | spareListNew.add(spare); |
| | | } |
| | | } |
| | | } |
| | | //更新TODO |
| | | |
| | | //addBatch(spareList); |
| | | |
| | | return null; |
| | | } |
| | | } |