Pārlūkot izejas kodu

异常归还解除逻辑调整 新增自动更换逻辑 归还异常新增发生时间和解除时间

车车 9 mēneši atpakaļ
vecāks
revīzija
b1ac7d38d1
17 mainītis faili ar 282 papildinājumiem un 112 dzēšanām
  1. 61 94
      ktg-common/src/main/java/com/ktg/common/utils/poi/ExcelUtil.java
  2. 11 0
      ktg-iscs/src/main/java/com/ktg/iscs/controller/IsMaterialsCabinetController.java
  3. 24 1
      ktg-iscs/src/main/java/com/ktg/iscs/controller/IsMaterialsController.java
  4. 14 4
      ktg-iscs/src/main/java/com/ktg/iscs/domain/IsMaterialsLoanException.java
  5. 27 0
      ktg-iscs/src/main/java/com/ktg/iscs/domain/dto/materials/BindingMaterialsDTO.java
  6. 3 0
      ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/cabinet/IsMaterialsCabinetVO.java
  7. 24 6
      ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/exception/IsMaterialsLoanExceptionPageVO.java
  8. 2 0
      ktg-iscs/src/main/java/com/ktg/iscs/mapper/IsMaterialsMapper.java
  9. 3 0
      ktg-iscs/src/main/java/com/ktg/iscs/service/IIsMaterialsCabinetService.java
  10. 2 0
      ktg-iscs/src/main/java/com/ktg/iscs/service/IIsMaterialsService.java
  11. 46 4
      ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsCabinetServiceImpl.java
  12. 14 0
      ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsLoanServiceImpl.java
  13. 18 0
      ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsServiceImpl.java
  14. 6 0
      ktg-iscs/src/main/resources/mapper/IsMaterialsCabinetMapper.xml
  15. 1 1
      ktg-iscs/src/main/resources/mapper/IsMaterialsCheckRecordMapper.xml
  16. 8 2
      ktg-iscs/src/main/resources/mapper/IsMaterialsLoanExceptionMapper.xml
  17. 18 0
      ktg-iscs/src/main/resources/mapper/IsMaterialsMapper.xml

+ 61 - 94
ktg-common/src/main/java/com/ktg/common/utils/poi/ExcelUtil.java

@@ -1,69 +1,5 @@
 package com.ktg.common.utils.poi;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.lang3.RegExUtils;
-import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
-import org.apache.poi.hssf.usermodel.HSSFPicture;
-import org.apache.poi.hssf.usermodel.HSSFPictureData;
-import org.apache.poi.hssf.usermodel.HSSFShape;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ooxml.POIXMLDocumentPart;
-import org.apache.poi.ss.usermodel.BorderStyle;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.CellType;
-import org.apache.poi.ss.usermodel.ClientAnchor;
-import org.apache.poi.ss.usermodel.DataValidation;
-import org.apache.poi.ss.usermodel.DataValidationConstraint;
-import org.apache.poi.ss.usermodel.DataValidationHelper;
-import org.apache.poi.ss.usermodel.DateUtil;
-import org.apache.poi.ss.usermodel.Drawing;
-import org.apache.poi.ss.usermodel.FillPatternType;
-import org.apache.poi.ss.usermodel.Font;
-import org.apache.poi.ss.usermodel.HorizontalAlignment;
-import org.apache.poi.ss.usermodel.IndexedColors;
-import org.apache.poi.ss.usermodel.PictureData;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.VerticalAlignment;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.ss.usermodel.WorkbookFactory;
-import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.ss.util.CellRangeAddressList;
-import org.apache.poi.util.IOUtils;
-import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
-import org.apache.poi.xssf.usermodel.XSSFDataValidation;
-import org.apache.poi.xssf.usermodel.XSSFDrawing;
-import org.apache.poi.xssf.usermodel.XSSFPicture;
-import org.apache.poi.xssf.usermodel.XSSFShape;
-import org.apache.poi.xssf.usermodel.XSSFSheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import com.ktg.common.annotation.Excel;
 import com.ktg.common.annotation.Excel.ColumnType;
 import com.ktg.common.annotation.Excel.Type;
@@ -79,10 +15,33 @@ import com.ktg.common.utils.file.FileTypeUtils;
 import com.ktg.common.utils.file.FileUtils;
 import com.ktg.common.utils.file.ImageUtils;
 import com.ktg.common.utils.reflect.ReflectUtils;
+import org.apache.commons.lang3.RegExUtils;
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ooxml.POIXMLDocumentPart;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellRangeAddressList;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.*;
+import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Excel相关处理
- * 
+ *
  * @author ruoyi
  */
 public class ExcelUtil<T>
@@ -202,7 +161,7 @@ public class ExcelUtil<T>
 
     /**
      * 对excel表单默认第一个索引名转换成list
-     * 
+     *
      * @param is 输入流
      * @return 转换后集合
      */
@@ -213,7 +172,7 @@ public class ExcelUtil<T>
 
     /**
      * 对excel表单默认第一个索引名转换成list
-     * 
+     *
      * @param is 输入流
      * @param titleNum 标题占用行数
      * @return 转换后集合
@@ -225,7 +184,7 @@ public class ExcelUtil<T>
 
     /**
      * 对excel表单指定表格索引名转换成list
-     * 
+     *
      * @param sheetName 表格索引名
      * @param titleNum 标题占用行数
      * @param is 输入流
@@ -405,7 +364,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @param list 导出数据集合
      * @param sheetName 工作表的名称
      * @return 结果
@@ -417,7 +376,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @param list 导出数据集合
      * @param sheetName 工作表的名称
      * @param title 标题
@@ -431,7 +390,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @param response 返回数据
      * @param list 导出数据集合
      * @param sheetName 工作表的名称
@@ -444,7 +403,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @param response 返回数据
      * @param list 导出数据集合
      * @param sheetName 工作表的名称
@@ -461,7 +420,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @param sheetName 工作表的名称
      * @return 结果
      */
@@ -472,7 +431,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @param sheetName 工作表的名称
      * @param title 标题
      * @return 结果
@@ -485,7 +444,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @param sheetName 工作表的名称
      * @return 结果
      */
@@ -496,7 +455,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @param sheetName 工作表的名称
      * @param title 标题
      * @return 结果
@@ -509,9 +468,17 @@ public class ExcelUtil<T>
         exportExcel(response);
     }
 
+    public void importTempExcelWithDate(HttpServletResponse response, String sheetName, List<T> list)
+    {
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        this.init(list, sheetName, StringUtils.EMPTY, Type.EXPORT);
+        exportExcel(response);
+    }
+
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @return 结果
      */
     public void exportExcel(HttpServletResponse response)
@@ -533,7 +500,7 @@ public class ExcelUtil<T>
 
     /**
      * 对list数据源将其里面的数据导入到excel表单
-     * 
+     *
      * @return 结果
      */
     public AjaxResult exportExcel()
@@ -589,7 +556,7 @@ public class ExcelUtil<T>
 
     /**
      * 填充excel数据
-     * 
+     *
      * @param index 序号
      * @param row 单元格行
      */
@@ -614,7 +581,7 @@ public class ExcelUtil<T>
 
     /**
      * 创建表格样式
-     * 
+     *
      * @param wb 工作薄对象
      * @return 样式列表
      */
@@ -706,7 +673,7 @@ public class ExcelUtil<T>
 
     /**
      * 设置单元格信息
-     * 
+     *
      * @param value 单元格值
      * @param attr 注解相关
      * @param cell 单元格信息
@@ -854,7 +821,7 @@ public class ExcelUtil<T>
 
     /**
      * 设置 POI XSSFSheet 单元格提示或选择框
-     * 
+     *
      * @param sheet 表单
      * @param textlist 下拉框显示的内容
      * @param promptContent 提示内容
@@ -891,7 +858,7 @@ public class ExcelUtil<T>
 
     /**
      * 解析导出值 0=男,1=女,2=未知
-     * 
+     *
      * @param propertyValue 参数值
      * @param converterExp 翻译注解
      * @param separator 分隔符
@@ -928,7 +895,7 @@ public class ExcelUtil<T>
 
     /**
      * 反向解析值 男=0,女=1,未知=2
-     * 
+     *
      * @param propertyValue 参数值
      * @param converterExp 翻译注解
      * @param separator 分隔符
@@ -965,7 +932,7 @@ public class ExcelUtil<T>
 
     /**
      * 解析字典值
-     * 
+     *
      * @param dictValue 字典值
      * @param dictType 字典类型
      * @param separator 分隔符
@@ -978,7 +945,7 @@ public class ExcelUtil<T>
 
     /**
      * 反向解析值字典值
-     * 
+     *
      * @param dictLabel 字典标签
      * @param dictType 字典类型
      * @param separator 分隔符
@@ -991,7 +958,7 @@ public class ExcelUtil<T>
 
     /**
      * 数据处理器
-     * 
+     *
      * @param value 数据值
      * @param excel 数据注解
      * @return
@@ -1068,7 +1035,7 @@ public class ExcelUtil<T>
 
     /**
      * 获取下载路径
-     * 
+     *
      * @param filename 文件名称
      */
     public String getAbsoluteFile(String filename)
@@ -1084,7 +1051,7 @@ public class ExcelUtil<T>
 
     /**
      * 获取bean中的属性值
-     * 
+     *
      * @param vo 实体对象
      * @param field 字段
      * @param excel 注解
@@ -1115,7 +1082,7 @@ public class ExcelUtil<T>
 
     /**
      * 以类的属性的get方法方法形式获取值
-     * 
+     *
      * @param o
      * @param name
      * @return value
@@ -1210,7 +1177,7 @@ public class ExcelUtil<T>
 
     /**
      * 创建工作表
-     * 
+     *
      * @param sheetNo sheet数量
      * @param index 序号
      */
@@ -1227,7 +1194,7 @@ public class ExcelUtil<T>
 
     /**
      * 获取单元格值
-     * 
+     *
      * @param row 获取的行
      * @param column 获取单元格列号
      * @return 单元格值
@@ -1287,7 +1254,7 @@ public class ExcelUtil<T>
 
     /**
      * 判断是否是空行
-     * 
+     *
      * @param row 判断的行
      * @return
      */
@@ -1375,7 +1342,7 @@ public class ExcelUtil<T>
 
     /**
      * 格式化不同类型的日期对象
-     * 
+     *
      * @param dateFormat 日期格式
      * @param val 被格式化的日期对象
      * @return 格式化后的日期字符

+ 11 - 0
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsMaterialsCabinetController.java

@@ -7,6 +7,7 @@ import com.ktg.common.enums.BusinessType;
 import com.ktg.common.pojo.CommonResult;
 import com.ktg.common.utils.poi.ExcelUtil;
 import com.ktg.iscs.domain.IsMaterialsCabinet;
+import com.ktg.iscs.domain.dto.materials.BindingMaterialsDTO;
 import com.ktg.iscs.domain.vo.cabinet.IsMaterialsCabinetVO;
 import com.ktg.iscs.service.IIsMaterialsCabinetService;
 import io.swagger.annotations.Api;
@@ -111,4 +112,14 @@ public class IsMaterialsCabinetController extends BaseController
     {
         return CommonResult.success(isMaterialsCabinetService.deleteIsMaterialsCabinetByCabinetIds(cabinetIds) != 0);
     }
+
+    @ApiOperation("绑定物资-物资柜绑定/解绑物资(物资更换,多对多)")
+    @PreAuthorize("@ss.hasPermi('iscs:materials:binding')")
+    @Log(title = "物资", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateMaterialsBindingRemove")
+    public CommonResult<Boolean> updateMaterialsBindingRemove(@RequestBody @Parameter(name = "dto", description = "修改数据类,放到body") BindingMaterialsDTO dto)
+    {
+        return CommonResult.success(isMaterialsCabinetService.updateMaterialsBindingRemove(dto));
+    }
+
 }

+ 24 - 1
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsMaterialsController.java

@@ -25,6 +25,8 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -56,6 +58,17 @@ public class IsMaterialsController extends BaseController
         return CommonResult.success(result);
     }
 
+    @ApiOperation("查询异常还错柜子的物资")
+    @Parameters({
+            @Parameter(name = "dto", description = "实体参数")
+    })
+    @PreAuthorize("@ss.hasPermi('iscs:materials:list')")
+    @GetMapping("/getExMaterials")
+    public CommonResult<List<MaterialsPageVO>> getExMaterials(MaterialsPageDTO dto) {
+        List<MaterialsPageVO> result = isMaterialsService.getExMaterials(dto);
+        return CommonResult.success(result);
+    }
+
     /**
      * 导出物资列表
      */
@@ -134,7 +147,17 @@ public class IsMaterialsController extends BaseController
     public void importTemplate(HttpServletResponse response)
     {
         ExcelUtil<ImportMaterialsVO> util = new ExcelUtil<>(ImportMaterialsVO.class);
-        util.importTemplateExcel(response, "物资数据");
+        ImportMaterialsVO importMaterialsVO = new ImportMaterialsVO();
+        importMaterialsVO.setCabinetName("一号物资柜");
+        importMaterialsVO.setMaterialsName("实验室白大褂K380");
+        importMaterialsVO.setMaterialsTypeName("白大褂");
+        importMaterialsVO.setValueName("s");
+        importMaterialsVO.setMaterialsRfid("7418965826");
+        importMaterialsVO.setSupplier("零号实验室");
+        importMaterialsVO.setExpirationDate(new Date());
+        ArrayList<ImportMaterialsVO> importMaterialsVOS = new ArrayList<>();
+        importMaterialsVOS.add(importMaterialsVO);
+        util.importTempExcelWithDate(response, "物资数据", importMaterialsVOS);
     }
 
     @ApiOperation("导入-物资")

+ 14 - 4
ktg-iscs/src/main/java/com/ktg/iscs/domain/IsMaterialsLoanException.java

@@ -40,8 +40,8 @@ public class IsMaterialsLoanException extends BaseBean
     private Long loanFromId;
 
     @ApiModelProperty(value = "领取时间")
-    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd")
-    @Excel(name = "领取时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "领取时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date loanTime;
 
     @ApiModelProperty(value = "归还人ID")
@@ -53,10 +53,20 @@ public class IsMaterialsLoanException extends BaseBean
     private Long restitutionToId;
 
     @ApiModelProperty(value = "实际归还时间")
-    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd")
-    @Excel(name = "实际归还时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "实际归还时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date actualRestitutionTime;
 
+    @ApiModelProperty(value = "处理时间")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date handleTime;
+
+    @ApiModelProperty(value = "异常发生时间")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "异常发生时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date occurTime;
+
     @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
     private String delFlag;
 

+ 27 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/dto/materials/BindingMaterialsDTO.java

@@ -0,0 +1,27 @@
+package com.ktg.iscs.domain.dto.materials;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 隔离点对象 is_isolation_point
+ *
+ * @author cgj
+ * @date 2024-10-18
+ */
+@Data
+public class BindingMaterialsDTO
+{
+    @ApiModelProperty(value = "物资柜ID")
+    private Long cabinetId;
+
+    @ApiModelProperty(value = "绑定的物资数据")
+    private List<Long> bindingMaterialIds;
+
+    @ApiModelProperty(value = "解绑的物资数据")
+    private List<Long> unbindMaterialIds;
+
+
+}

+ 3 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/cabinet/IsMaterialsCabinetVO.java

@@ -65,4 +65,7 @@ public class IsMaterialsCabinetVO extends BaseBean
 
     @ApiModelProperty(value = "状态(0-正常(所有都在物资柜,都正常的) 1-使用中(有借出在外的) 2-异常(有物资异常的))")
     private String status;
+
+    @ApiModelProperty(value = "异常原因")
+    private String exReason;
 }

+ 24 - 6
ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/exception/IsMaterialsLoanExceptionPageVO.java

@@ -47,8 +47,8 @@ public class IsMaterialsLoanExceptionPageVO extends BaseBean
     private String loanFromName;
 
     @ApiModelProperty(value = "领取时间")
-    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd")
-    @Excel(name = "领取时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "领取时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date loanTime;
 
     @ApiModelProperty(value = "归还人ID")
@@ -66,10 +66,20 @@ public class IsMaterialsLoanExceptionPageVO extends BaseBean
     private String restitutionToName;
 
     @ApiModelProperty(value = "实际归还时间")
-    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd")
-    @Excel(name = "实际归还时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "实际归还时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date actualRestitutionTime;
 
+    @ApiModelProperty(value = "处理时间")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date handleTime;
+
+    @ApiModelProperty(value = "异常发生时间")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "异常发生时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date occurTime;
+
     @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
     private String delFlag;
 
@@ -77,12 +87,20 @@ public class IsMaterialsLoanExceptionPageVO extends BaseBean
     @Excel(name = "状态", readConverterExp = "0=-未处理,1=-已处理")
     private String status;
 
-    @ApiModelProperty(value = "开始时间")
+    @ApiModelProperty(value = "异常发生开始时间")
     @TableField(exist = false)
     private String startTime;
 
-    @ApiModelProperty(value = "结束时间")
+    @ApiModelProperty(value = "异常发生结束时间")
     @TableField(exist = false)
     private String endTime;
 
+    @ApiModelProperty(value = "异常解决开始时间")
+    @TableField(exist = false)
+    private String handleStartTime;
+
+    @ApiModelProperty(value = "异常解决结束时间")
+    @TableField(exist = false)
+    private String handleEndTime;
+
 }

+ 2 - 0
ktg-iscs/src/main/java/com/ktg/iscs/mapper/IsMaterialsMapper.java

@@ -68,4 +68,6 @@ public interface IsMaterialsMapper extends BaseMapperX<IsMaterials>
     int deleteIsMaterialsByMaterialsIds(Long[] materialsIds);
 
     Page<MaterialsPageVO> getIsMaterialsPage(Page<IsMaterials> page, @Param(value = "dto") MaterialsPageDTO dto);
+
+    List<MaterialsPageVO> getExMaterials(@Param(value = "materialsIds") List<Long> materialsIds);
 }

+ 3 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/IIsMaterialsCabinetService.java

@@ -3,6 +3,7 @@ package com.ktg.iscs.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ktg.iscs.domain.IsMaterialsCabinet;
+import com.ktg.iscs.domain.dto.materials.BindingMaterialsDTO;
 import com.ktg.iscs.domain.vo.cabinet.IsMaterialsCabinetVO;
 
 import java.util.List;
@@ -70,4 +71,6 @@ public interface IIsMaterialsCabinetService extends IService<IsMaterialsCabinet>
      * @return 物资柜集合
      */
     Page<IsMaterialsCabinetVO> getIsMaterialsCabinetPage(Page<IsMaterialsCabinet> page, IsMaterialsCabinet isMaterialsCabinet);
+
+    Boolean updateMaterialsBindingRemove(BindingMaterialsDTO dto);
 }

+ 2 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/IIsMaterialsService.java

@@ -79,4 +79,6 @@ public interface IIsMaterialsService extends IService<IsMaterials>
     String importMaterials(List<ImportMaterialsVO> itemList, boolean updateSupport, String operName) throws JsonProcessingException;
 
     Boolean updateMaterialsBinding(MaterialBindingDTO dto);
+
+    List<MaterialsPageVO> getExMaterials(MaterialsPageDTO dto);
 }

+ 46 - 4
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsCabinetServiceImpl.java

@@ -8,13 +8,17 @@ import com.ktg.common.core.text.Convert;
 import com.ktg.common.utils.DateUtils;
 import com.ktg.iscs.domain.IsMaterials;
 import com.ktg.iscs.domain.IsMaterialsCabinet;
+import com.ktg.iscs.domain.IsMaterialsLoanException;
+import com.ktg.iscs.domain.dto.materials.BindingMaterialsDTO;
 import com.ktg.iscs.domain.vo.cabinet.IsMaterialsCabinetVO;
 import com.ktg.iscs.mapper.IsMaterialsCabinetMapper;
 import com.ktg.iscs.service.IIsMaterialsCabinetService;
+import com.ktg.iscs.service.IIsMaterialsLoanExceptionService;
 import com.ktg.iscs.service.IIsMaterialsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -31,6 +35,8 @@ public class IsMaterialsCabinetServiceImpl extends ServiceImpl<IsMaterialsCabine
     private IsMaterialsCabinetMapper isMaterialsCabinetMapper;
     @Autowired
     private IIsMaterialsService iIsMaterialsService;
+    @Autowired
+    private IIsMaterialsLoanExceptionService isMaterialsLoanExceptionService;
 
     /**
      * 查询物资柜
@@ -121,24 +127,60 @@ public class IsMaterialsCabinetServiceImpl extends ServiceImpl<IsMaterialsCabine
             // 2.开始获取所有柜子的借出或异常的物资
             List<IsMaterials> materials = iIsMaterialsService.list(Wrappers.<IsMaterials>lambdaQuery()
                     .in(IsMaterials::getMaterialsCabinetId, cabinetIds)
-                    .and(o -> o.eq(IsMaterials::getLoanState, "0").or().eq(IsMaterials::getStatus, "1")));
+                    .and(o -> o.eq(IsMaterials::getLoanState, "0").or().ne(IsMaterials::getStatus, "0")));
             for (IsMaterialsCabinetVO record : isMaterialsCabinetPage.getRecords()) {
                 record.setStatus("0");
-                // 2.1判断是否异常
+                record.setExReason("0");
+                // 2.1判断是否异常,取物资的异常放入其中
                 List<IsMaterials> exMaterial = materials.stream().filter(o -> o.getMaterialsCabinetId().equals(record.getCabinetId())
-                        && "1".equals(o.getStatus())).collect(Collectors.toList());
+                        // 把当前物资柜借出去的数据去掉,因为不属于我的异常,只能属于我借出去了,如果还到别的柜子,别的柜子应该报异常
+                        && !"3".equals(o.getStatus()))
+                        .sorted(Comparator.comparing(IsMaterials::getStatus).reversed())
+                        .collect(Collectors.toList());
                 if (!exMaterial.isEmpty()) {
                     record.setStatus("2");
+                    record.setExReason(exMaterial.get(0).getStatus());
                     continue;
                 }
-                // 2.2判断是否借出
+                // 2.2检查有没有错还进来的物资
+                List<IsMaterialsLoanException> exLoan = isMaterialsLoanExceptionService.list(Wrappers.<IsMaterialsLoanException>lambdaQuery()
+                        .eq(IsMaterialsLoanException::getRestitutionToId, record.getCabinetId())
+                        .eq(IsMaterialsLoanException::getStatus, "0"));
+                if (!exLoan.isEmpty()) {
+                    record.setStatus("2");
+                    record.setExReason("3");
+                    continue;
+                }
+                // 2.3判断是否借出
                 List<IsMaterials> loanMaterial = materials.stream().filter(o -> o.getMaterialsCabinetId().equals(record.getCabinetId())
                         && "0".equals(o.getLoanState())).collect(Collectors.toList());
                 if (!loanMaterial.isEmpty()) {
                     record.setStatus("1");
+                    record.setExReason("4");
                 }
             }
         }
         return isMaterialsCabinetPage;
     }
+
+    @Override
+    public Boolean updateMaterialsBindingRemove(BindingMaterialsDTO dto) {
+        Assert.notNull(dto.getCabinetId(), "物资柜不能为空!");
+        // 1.开始解绑
+        if (!dto.getUnbindMaterialIds().isEmpty()) {
+            iIsMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
+                    .in(IsMaterials::getMaterialsId, dto.getUnbindMaterialIds())
+                    .set(IsMaterials::getMaterialsCabinetId, null)
+                    .set(IsMaterials::getLoanState, "0"));
+        }
+        // 2.开始绑定
+        if (!dto.getBindingMaterialIds().isEmpty()) {
+            iIsMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
+                    .in(IsMaterials::getMaterialsId, dto.getBindingMaterialIds())
+                    .set(IsMaterials::getMaterialsCabinetId, dto.getCabinetId())
+                    .set(IsMaterials::getLoanState, "1")
+                    .set(IsMaterials::getStatus, "0"));
+        }
+        return true;
+    }
 }

+ 14 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsLoanServiceImpl.java

@@ -321,6 +321,19 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
         // 1.物资信息
         IsMaterials materials = isMaterialsService.getById(isMaterialsLoan.getMaterialsId());
         MaterialsTypePageVO materialsTypePageVO = new MaterialsTypePageVO();
+        // 1.1如果是从错误柜子中拿出这个物资,默认是为了更正
+        if ("0".equals(materials.getLoanState()) && "3".equals(materials.getStatus())) {
+            // 1.1.1纠正归还异常
+            isMaterialsLoanExceptionService.update(Wrappers.<IsMaterialsLoanException>lambdaUpdate()
+                    .eq(IsMaterialsLoanException::getMaterialsId, isMaterialsLoan.getMaterialsId())
+                    .set(IsMaterialsLoanException::getStatus, "1")
+                    .set(IsMaterialsLoanException::getHandleTime, nowDate));
+            // 1.1.2纠正物资状态
+            isMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
+                    .eq(IsMaterials::getMaterialsId, dto.getMaterialsId())
+                    .set(IsMaterials::getStatus, "0"));
+            return 1;
+        }
         // 1.2借用到期规则
         IsMailNotifyConfig reminderConf = isMailNotifyConfigService.getOne(Wrappers.<IsMailNotifyConfig>lambdaQuery()
                 .eq(IsMailNotifyConfig::getTemplateCode, reminder));
@@ -503,6 +516,7 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
             loanException.setRestitutionUserId(dto.getRestitutionUserId());
             loanException.setRestitutionToId(dto.getRestitutionToId());
             loanException.setActualRestitutionTime(new Date());
+            loanException.setOccurTime(new Date());
             isMaterialsLoanExceptionService.save(loanException);
             isMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
                     .eq(IsMaterials::getMaterialsId, materials.getMaterialsId())

+ 18 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsServiceImpl.java

@@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -52,6 +53,8 @@ public class IsMaterialsServiceImpl extends ServiceImpl<IsMaterialsMapper, IsMat
     private IIsMaterialsPropertyService iIsMaterialsPropertyService;
     @Autowired
     private IIsMaterialsPropertyValueService iIsMaterialsPropertyValueService;
+    @Autowired
+    private IIsMaterialsLoanExceptionService isMaterialsLoanExceptionService;
 
     /**
      * 查询物资
@@ -329,4 +332,19 @@ public class IsMaterialsServiceImpl extends ServiceImpl<IsMaterialsMapper, IsMat
                 .set(IsMaterials::getMaterialsCabinetId, dto.getMaterialsCabinetId()));
     }
 
+    @Override
+    public List<MaterialsPageVO> getExMaterials(MaterialsPageDTO dto) {
+        // 查询异常未处理的归还物资
+        List<IsMaterialsLoanException> exMaterials = isMaterialsLoanExceptionService.list(Wrappers.<IsMaterialsLoanException>lambdaQuery()
+                .eq(IsMaterialsLoanException::getStatus, "0")
+                .eq(dto.getMaterialsCabinetId() != null, IsMaterialsLoanException::getRestitutionToId, dto.getMaterialsCabinetId()));
+        // 吧当前柜子的异常数据返回给前端
+        List<MaterialsPageVO> materialsPageVOS = new ArrayList<>();
+        if (!exMaterials.isEmpty()) {
+            List<Long> materialsIds = exMaterials.stream().map(IsMaterialsLoanException::getMaterialsId).collect(Collectors.toList());
+            materialsPageVOS = isMaterialsMapper.getExMaterials(materialsIds);
+        }
+        return materialsPageVOS;
+    }
+
 }

+ 6 - 0
ktg-iscs/src/main/resources/mapper/IsMaterialsCabinetMapper.xml

@@ -119,6 +119,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN is_hardware h ON c.hardware_id = h.id
         LEFT JOIN is_workstation w ON c.workstation_id = w.workstation_id
         <where>
+            <if test="dto.cabinetId != null">
+                and c.cabinet_id = #{dto.cabinetId}
+            </if>
             <if test="dto.cabinetCode != null and dto.cabinetCode.trim != ''">
                 and c.cabinet_code like concat('%',#{dto.cabinetCode},'%')
             </if>
@@ -128,6 +131,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="dto.cabinetName != null and dto.cabinetName.trim != ''">
                 and c.cabinet_name like concat('%',#{dto.cabinetName},'%')
             </if>
+            <if test="dto.status != null and dto.status.trim != ''">
+                and c.status = #{dto.status}
+            </if>
         </where>
         ORDER BY
         c.cabinet_id DESC

+ 1 - 1
ktg-iscs/src/main/resources/mapper/IsMaterialsCheckRecordMapper.xml

@@ -20,7 +20,7 @@
             is_materials_check_record r
             LEFT JOIN is_materials_check_plan p ON p.plan_id = r.plan_id
             LEFT JOIN is_materials m ON m.materials_id = r.materials_id
-            LEFT JOIN is_materials_cabinet mc ON mc.cabinet_id = m.materials_cabinet_id
+            LEFT JOIN is_materials_cabinet mc ON mc.cabinet_id = r.cabinet_id
             LEFT JOIN is_materials_type t ON t.materials_type_id = m.materials_type_id
             LEFT JOIN sys_user u ON u.user_id = r.check_user_id
         <where>

+ 8 - 2
ktg-iscs/src/main/resources/mapper/IsMaterialsLoanExceptionMapper.xml

@@ -29,10 +29,16 @@
                 and (e.loan_from_id = #{dto.loanFromId} || e.restitution_to_id = #{dto.restitutionToId})
             </if>
             <if test="dto.startTime != null and dto.startTime.trim != ''">
-                and e.loan_time &gt;= #{dto.startTime}
+                and e.occur_time &gt;= #{dto.startTime}
             </if>
             <if test="dto.endTime != null and dto.endTime.trim != ''">
-                and e.loan_time &lt;= #{dto.endTime}
+                and e.occur_time &lt;= #{dto.endTime}
+            </if>
+            <if test="dto.handleStartTime != null and dto.handleStartTime.trim != ''">
+                and e.handle_time &gt;= #{dto.handleStartTime}
+            </if>
+            <if test="dto.handleEndTime != null and dto.handleEndTime.trim != ''">
+                and e.handle_time &lt;= #{dto.handleEndTime}
             </if>
             <if test="dto.status != null and dto.status.trim != ''">
                 and e.status = #{dto.status}

+ 18 - 0
ktg-iscs/src/main/resources/mapper/IsMaterialsMapper.xml

@@ -205,4 +205,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         ORDER BY m.materials_id DESC
     </select>
+    <select id="getExMaterials" resultType="com.ktg.iscs.domain.vo.materials.MaterialsPageVO">
+        SELECT
+            m.*,
+            t.materials_type_name,
+            c.cabinet_name,
+            t.materials_type_icon,
+            t.materials_type_picture
+        FROM
+            is_materials m
+                LEFT JOIN is_materials_type t ON t.materials_type_id = m.materials_type_id
+                LEFT JOIN is_materials_cabinet c ON c.cabinet_id = m.materials_cabinet_id
+        <where>
+            m.materials_id in
+            <foreach collection="materialsIds" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </where>
+    </select>
 </mapper>