Ver Fonte

对接物资归还错误柜子异常处理逻辑

车车 há 9 meses atrás
pai
commit
3d0da35706

+ 3 - 4
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsMaterialsCheckRecordController.java

@@ -10,6 +10,7 @@ import com.ktg.common.pojo.CommonResult;
 import com.ktg.common.utils.poi.ExcelUtil;
 import com.ktg.iscs.domain.IsMaterialsCheckRecord;
 import com.ktg.iscs.domain.dto.checkRecord.CheckRecordPageDTO;
+import com.ktg.iscs.domain.dto.checkRecord.CheckRecordParamDTO;
 import com.ktg.iscs.domain.vo.checkRecord.IsMaterialsCheckRecordVO;
 import com.ktg.iscs.service.IIsMaterialsCheckRecordService;
 import io.swagger.annotations.Api;
@@ -22,7 +23,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -80,10 +80,9 @@ public class IsMaterialsCheckRecordController extends BaseController
     @PreAuthorize("@ss.hasPermi('iscs:check:add')")
     @Log(title = "物资检查记录", businessType = BusinessType.INSERT)
     @PostMapping("/insertIsMaterialsCheckRecord")
-    public CommonResult<Boolean> insertIsMaterialsCheckRecord(@RequestBody @Parameter(name = "isMaterialsCheckRecord", description = "新增数据类,放到body") IsMaterialsCheckRecord isMaterialsCheckRecord)
+    public CommonResult<Boolean> insertIsMaterialsCheckRecord(@RequestBody @Parameter(name = "dto", description = "新增数据类,放到body") CheckRecordParamDTO dto)
     {
-        isMaterialsCheckRecord.setCheckDate(new Date());
-        return CommonResult.success(isMaterialsCheckRecordService.insertIsMaterialsCheckRecord(isMaterialsCheckRecord));
+        return CommonResult.success(isMaterialsCheckRecordService.insertIsMaterialsCheckRecord(dto));
     }
 
     @ApiOperation("修改物资检查记录")

+ 107 - 0
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsMaterialsLoanExceptionController.java

@@ -0,0 +1,107 @@
+package com.ktg.iscs.controller;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ktg.common.annotation.Log;
+import com.ktg.common.core.controller.BaseController;
+import com.ktg.common.enums.BusinessType;
+import com.ktg.common.pojo.CommonResult;
+import com.ktg.common.utils.poi.ExcelUtil;
+import com.ktg.iscs.domain.IsMaterialsLoanException;
+import com.ktg.iscs.domain.vo.exception.IsMaterialsLoanExceptionPageVO;
+import com.ktg.iscs.service.IIsMaterialsLoanExceptionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 物资归还异常Controller
+ *
+ * @author cgj
+ * @date 2025-02-10
+ */
+@Api(tags = "物资归还异常")
+@RestController
+@RequestMapping("/iscs/exception")
+public class IsMaterialsLoanExceptionController extends BaseController
+{
+    @Autowired
+    private IIsMaterialsLoanExceptionService isMaterialsLoanExceptionService;
+
+    @ApiOperation("查询物资归还异常-分页")
+    @Parameters({
+            @Parameter(name = "page", description = "Page"),
+            @Parameter(name = "isMaterialsLoanException", description = "实体参数")
+    })
+    @PreAuthorize("@ss.hasPermi('iscs:exception:list')")
+    @GetMapping("/getIsMaterialsLoanExceptionPage")
+    public CommonResult<Page<IsMaterialsLoanExceptionPageVO>> getIsMaterialsLoanExceptionPage(Page<IsMaterialsLoanException> page, IsMaterialsLoanExceptionPageVO isMaterialsLoanException)
+    {
+        Page<IsMaterialsLoanExceptionPageVO> result = isMaterialsLoanExceptionService.getIsMaterialsLoanExceptionPage(page, isMaterialsLoanException);
+        return CommonResult.success(result);
+    }
+
+    @ApiOperation("导出物资归还异常列表")
+    @Parameter(name = "isMaterialsLoanException", description = "实体参数")
+    @PreAuthorize("@ss.hasPermi('iscs:exception:export')")
+    @Log(title = "物资归还异常", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportIsMaterialsLoanException")
+    public void exportIsMaterialsLoanException(HttpServletResponse response, IsMaterialsLoanException isMaterialsLoanException)
+    {
+        Page<IsMaterialsLoanException> page = new Page<>();
+        page.setSize(-1);
+        page.setCurrent(1);
+        List<IsMaterialsLoanException> list = isMaterialsLoanExceptionService.page(page, Wrappers.<IsMaterialsLoanException>lambdaQuery()
+                .orderByDesc(IsMaterialsLoanException::getExceptionId)).getRecords();
+        ExcelUtil<IsMaterialsLoanException> util = new ExcelUtil<IsMaterialsLoanException>(IsMaterialsLoanException.class);
+        util.exportExcel(response, list, "物资归还异常数据");
+    }
+
+    @ApiOperation("获取物资归还异常详细信息")
+    @Parameter(name = "exceptionId", description = "exceptionId")
+    @PreAuthorize("@ss.hasPermi('iscs:exception:query')")
+    @GetMapping(value = "/selectIsMaterialsLoanExceptionById")
+    public CommonResult<IsMaterialsLoanException> selectIsMaterialsLoanExceptionById(Long exceptionId)
+    {
+        return CommonResult.success(isMaterialsLoanExceptionService.getById(exceptionId));
+    }
+
+    @ApiOperation("新增物资归还异常")
+    @PreAuthorize("@ss.hasPermi('iscs:exception:add')")
+    @Log(title = "物资归还异常", businessType = BusinessType.INSERT)
+    @PostMapping("/insertIsMaterialsLoanException")
+    public CommonResult<Boolean> insertIsMaterialsLoanException(@RequestBody @Parameter(name = "isMaterialsLoanException", description = "新增数据类,放到body") IsMaterialsLoanException isMaterialsLoanException)
+    {
+        return CommonResult.success(isMaterialsLoanExceptionService.save(isMaterialsLoanException));
+    }
+
+    @ApiOperation("修改物资归还异常")
+    @PreAuthorize("@ss.hasPermi('iscs:exception:edit')")
+    @Log(title = "物资归还异常", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateIsMaterialsLoanException")
+    public CommonResult<Boolean> updateIsMaterialsLoanException(@RequestBody @Parameter(name = "isMaterialsLoanException", description = "修改数据类,放到body") IsMaterialsLoanException isMaterialsLoanException)
+    {
+        return CommonResult.success(isMaterialsLoanExceptionService.updateById(isMaterialsLoanException));
+    }
+
+    @ApiOperation("删除物资归还异常")
+    @PreAuthorize("@ss.hasPermi('iscs:exception:remove')")
+    @Log(title = "物资归还异常", businessType = BusinessType.DELETE)
+	@PostMapping("/deleteIsMaterialsLoanExceptionByExceptionIds")
+    public CommonResult<Boolean> deleteIsMaterialsLoanExceptionByExceptionIds(String exceptionIds)
+    {
+        Assert.notBlank(exceptionIds, "请选择需要删除的数据!");
+        Long[] longIds = Convert.toLongArray(exceptionIds);
+        return CommonResult.success(isMaterialsLoanExceptionService.removeBatchByIds(Arrays.asList(longIds)));
+    }
+}

+ 1 - 1
ktg-iscs/src/main/java/com/ktg/iscs/domain/IsMaterials.java

@@ -88,7 +88,7 @@ public class IsMaterials extends BaseBean
     @ApiModelProperty(value = "属性数组,JSON 格式 [{propertId: , valueId: }, {propertId: , valueId: }]")
     private String properties;
 
-    @ApiModelProperty(value = "物资状态(0-正常 1-损坏 2-过期 3-放错柜子)")
+    @ApiModelProperty(value = "物资状态(字典material_info_status)")
     private String status;
 
     @ApiModelProperty(value = "物资类型图标")

+ 67 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/IsMaterialsLoanException.java

@@ -0,0 +1,67 @@
+package com.ktg.iscs.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ktg.common.annotation.Excel;
+import com.ktg.common.core.domain.model.BaseBean;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 物资归还异常对象 is_materials_loan_exception
+ *
+ * @author cgj
+ * @date 2025-02-10
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class IsMaterialsLoanException extends BaseBean
+{
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "异常记录ID")
+    @TableId(type = IdType.AUTO)
+    private Long exceptionId;
+
+    @ApiModelProperty(value = "物资ID")
+    @Excel(name = "物资ID")
+    private Long materialsId;
+
+    @ApiModelProperty(value = "出借记录ID")
+    @Excel(name = "出借记录ID")
+    private Long materialsLoanId;
+
+    @ApiModelProperty(value = "物资所属柜ID")
+    @Excel(name = "物资所属柜ID")
+    private Long loanFromId;
+
+    @ApiModelProperty(value = "领取时间")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd")
+    @Excel(name = "领取时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date loanTime;
+
+    @ApiModelProperty(value = "归还人ID")
+    @Excel(name = "归还人ID")
+    private Long restitutionUserId;
+
+    @ApiModelProperty(value = "归还柜ID")
+    @Excel(name = "归还柜ID")
+    private Long restitutionToId;
+
+    @ApiModelProperty(value = "实际归还时间")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd")
+    @Excel(name = "实际归还时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date actualRestitutionTime;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
+    private String delFlag;
+
+    @ApiModelProperty(value = "状态(0-未处理 1-已处理)")
+    @Excel(name = "状态", readConverterExp = "0=-未处理,1=-已处理")
+    private String status;
+
+}

+ 22 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/dto/checkRecord/CheckRecordParamDTO.java

@@ -0,0 +1,22 @@
+package com.ktg.iscs.domain.dto.checkRecord;
+
+import com.ktg.iscs.domain.IsMaterialsCheckRecord;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 物资检查记录对象 is_materials_check_record
+ *
+ * @author cgj
+ * @date 2025-01-14
+ */
+@Data
+public class CheckRecordParamDTO
+{
+
+    @ApiModelProperty(value = "list")
+    private List<IsMaterialsCheckRecord> list;
+
+}

+ 88 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/exception/IsMaterialsLoanExceptionPageVO.java

@@ -0,0 +1,88 @@
+package com.ktg.iscs.domain.vo.exception;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ktg.common.annotation.Excel;
+import com.ktg.common.core.domain.model.BaseBean;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 物资归还异常对象 is_materials_loan_exception
+ *
+ * @author cgj
+ * @date 2025-02-10
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class IsMaterialsLoanExceptionPageVO extends BaseBean
+{
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "异常记录ID")
+    @TableId(type = IdType.AUTO)
+    private Long exceptionId;
+
+    @ApiModelProperty(value = "物资ID")
+    @Excel(name = "物资ID")
+    private Long materialsId;
+
+    @Excel(name = "物资")
+    private String materialsName;
+
+    @ApiModelProperty(value = "出借记录ID")
+    @Excel(name = "出借记录ID")
+    private Long materialsLoanId;
+
+    @ApiModelProperty(value = "物资所属柜ID")
+    @Excel(name = "物资所属柜ID")
+    private Long loanFromId;
+
+    @Excel(name = "物资所属柜")
+    private String loanFromName;
+
+    @ApiModelProperty(value = "领取时间")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd")
+    @Excel(name = "领取时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date loanTime;
+
+    @ApiModelProperty(value = "归还人ID")
+    @Excel(name = "归还人ID")
+    private Long restitutionUserId;
+
+    @Excel(name = "归还人")
+    private String restitutionUserName;
+
+    @ApiModelProperty(value = "归还柜ID")
+    @Excel(name = "归还柜ID")
+    private Long restitutionToId;
+
+    @Excel(name = "归还柜")
+    private String restitutionToName;
+
+    @ApiModelProperty(value = "实际归还时间")
+    @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd")
+    @Excel(name = "实际归还时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date actualRestitutionTime;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
+    private String delFlag;
+
+    @ApiModelProperty(value = "状态(0-未处理 1-已处理)")
+    @Excel(name = "状态", readConverterExp = "0=-未处理,1=-已处理")
+    private String status;
+
+    @ApiModelProperty(value = "开始时间")
+    @TableField(exist = false)
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    @TableField(exist = false)
+    private String endTime;
+
+}

+ 21 - 0
ktg-iscs/src/main/java/com/ktg/iscs/mapper/IsMaterialsLoanExceptionMapper.java

@@ -0,0 +1,21 @@
+package com.ktg.iscs.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ktg.common.mapper.BaseMapperX;
+import com.ktg.iscs.domain.IsMaterialsLoanException;
+import com.ktg.iscs.domain.vo.exception.IsMaterialsLoanExceptionPageVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 物资归还异常Mapper接口
+ *
+ * @author cgj
+ * @date 2025-02-10
+ */
+@Mapper
+public interface IsMaterialsLoanExceptionMapper extends BaseMapperX<IsMaterialsLoanException> {
+
+    Page<IsMaterialsLoanExceptionPageVO> getIsMaterialsLoanExceptionPage(Page<IsMaterialsLoanException> page, @Param(value = "dto") IsMaterialsLoanExceptionPageVO dto);
+
+}

+ 2 - 1
ktg-iscs/src/main/java/com/ktg/iscs/service/IIsMaterialsCheckRecordService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ktg.iscs.domain.IsMaterialsCheckRecord;
 import com.ktg.iscs.domain.dto.checkRecord.CheckRecordPageDTO;
+import com.ktg.iscs.domain.dto.checkRecord.CheckRecordParamDTO;
 import com.ktg.iscs.domain.vo.checkRecord.IsMaterialsCheckRecordVO;
 
 /**
@@ -16,6 +17,6 @@ public interface IIsMaterialsCheckRecordService extends IService<IsMaterialsChec
 
     Page<IsMaterialsCheckRecordVO> getIsMaterialsCheckRecordPage(Page<IsMaterialsCheckRecord> page, CheckRecordPageDTO dto);
 
-    Boolean insertIsMaterialsCheckRecord(IsMaterialsCheckRecord isMaterialsCheckRecord);
+    Boolean insertIsMaterialsCheckRecord(CheckRecordParamDTO dto);
 
 }

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

@@ -0,0 +1,18 @@
+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.IsMaterialsLoanException;
+import com.ktg.iscs.domain.vo.exception.IsMaterialsLoanExceptionPageVO;
+
+/**
+ * 物资归还异常Service接口
+ *
+ * @author cgj
+ * @date 2025-02-10
+ */
+public interface IIsMaterialsLoanExceptionService extends IService<IsMaterialsLoanException> {
+
+    Page<IsMaterialsLoanExceptionPageVO> getIsMaterialsLoanExceptionPage(Page<IsMaterialsLoanException> page, IsMaterialsLoanExceptionPageVO isMaterialsLoanException);
+
+}

+ 15 - 10
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsCheckRecordServiceImpl.java

@@ -8,6 +8,7 @@ import com.ktg.common.utils.StringUtils;
 import com.ktg.iscs.domain.IsMaterials;
 import com.ktg.iscs.domain.IsMaterialsCheckRecord;
 import com.ktg.iscs.domain.dto.checkRecord.CheckRecordPageDTO;
+import com.ktg.iscs.domain.dto.checkRecord.CheckRecordParamDTO;
 import com.ktg.iscs.domain.vo.checkRecord.IsMaterialsCheckRecordVO;
 import com.ktg.iscs.mapper.IsMaterialsCheckRecordMapper;
 import com.ktg.iscs.service.IIsMaterialsCheckRecordService;
@@ -38,16 +39,20 @@ public class IsMaterialsCheckRecordServiceImpl extends ServiceImpl<IsMaterialsCh
 
     @Transactional
     @Override
-    public Boolean insertIsMaterialsCheckRecord(IsMaterialsCheckRecord isMaterialsCheckRecord) {
-        Assert.notNull(isMaterialsCheckRecord.getPlanId(), "计划id不能为空!");
-        Assert.notNull(isMaterialsCheckRecord.getMaterialsId(), "物资id不能为空!");
-        save(isMaterialsCheckRecord);
-        // 2.开始更新物资本身状态
-        if ("1".equals(isMaterialsCheckRecord.getStatus()) && StringUtils.isNotBlank(isMaterialsCheckRecord.getReason())) {
-            //  reason字典值exceptions_status 对应调整material_info_status  损坏和过期时对应的,所以直接set
-            iIsMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
-                    .eq(IsMaterials::getMaterialsId, isMaterialsCheckRecord.getMaterialsId())
-                    .set(IsMaterials::getStatus, isMaterialsCheckRecord.getReason()));
+    public Boolean insertIsMaterialsCheckRecord(CheckRecordParamDTO dto) {
+        if (!dto.getList().isEmpty()) {
+            for (IsMaterialsCheckRecord isMaterialsCheckRecord : dto.getList()) {
+                Assert.notNull(isMaterialsCheckRecord.getPlanId(), "计划id不能为空!");
+                Assert.notNull(isMaterialsCheckRecord.getMaterialsId(), "物资id不能为空!");
+                save(isMaterialsCheckRecord);
+                // 2.开始更新物资本身状态
+                if ("1".equals(isMaterialsCheckRecord.getStatus()) && StringUtils.isNotBlank(isMaterialsCheckRecord.getReason())) {
+                    //  reason字典值exceptions_status 对应调整material_info_status  损坏和过期时对应的,所以直接set
+                    iIsMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
+                            .eq(IsMaterials::getMaterialsId, isMaterialsCheckRecord.getMaterialsId())
+                            .set(IsMaterials::getStatus, isMaterialsCheckRecord.getReason()));
+                }
+            }
         }
         return true;
     }

+ 30 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsLoanExceptionServiceImpl.java

@@ -0,0 +1,30 @@
+package com.ktg.iscs.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ktg.iscs.domain.IsMaterialsLoanException;
+import com.ktg.iscs.domain.vo.exception.IsMaterialsLoanExceptionPageVO;
+import com.ktg.iscs.mapper.IsMaterialsLoanExceptionMapper;
+import com.ktg.iscs.service.IIsMaterialsLoanExceptionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 物资归还异常Service业务层处理
+ *
+ * @author cgj
+ * @date 2025-02-10
+ */
+@Service
+public class IsMaterialsLoanExceptionServiceImpl extends ServiceImpl<IsMaterialsLoanExceptionMapper, IsMaterialsLoanException> implements IIsMaterialsLoanExceptionService {
+
+    @Autowired
+    private IsMaterialsLoanExceptionMapper isMaterialsLoanExceptionMapper;
+
+    @Override
+    public Page<IsMaterialsLoanExceptionPageVO> getIsMaterialsLoanExceptionPage(Page<IsMaterialsLoanException> page, IsMaterialsLoanExceptionPageVO isMaterialsLoanException) {
+        Page<IsMaterialsLoanExceptionPageVO> result = isMaterialsLoanExceptionMapper.getIsMaterialsLoanExceptionPage(page, isMaterialsLoanException);
+        return result;
+    }
+
+}

+ 35 - 9
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsLoanServiceImpl.java

@@ -65,6 +65,8 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
     private IIsMailSendTaskItemService iIsMailSendTaskItemService;
     @Autowired
     private IIsMaterialsCabinetService iIsMaterialsCabinetService;
+    @Autowired
+    private IIsMaterialsLoanExceptionService isMaterialsLoanExceptionService;
     @Resource
     private ISysUserService iSysUserService;
     @Autowired
@@ -481,14 +483,7 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
         Assert.notNull(dto.getMaterialsId(), "物资id不能为空!");
         Assert.notNull(dto.getRestitutionUserId(), "归还人id不能为空!");
         Assert.notNull(dto.getRestitutionToId(), "归还柜id不能为空!");
-        // 0.查询物资信息
-        IsMaterials materials = isMaterialsService.getById(dto.getMaterialsId());
-        // 0.1 如果不是归还到原先的柜子,则不能更新归还记录,存储归还异常等待处理
-        if (!materials.getMaterialsCabinetId().equals(dto.getRestitutionToId())) {
-
-            return true;
-        }
-        // 1.检查借出数据
+        // 0.检查借出数据
         List<IsMaterialsLoan> loanList = list(Wrappers.<IsMaterialsLoan>lambdaQuery()
                 .eq(IsMaterialsLoan::getMaterialsId, dto.getMaterialsId())
                 .isNull(IsMaterialsLoan::getRestitutionUserId)
@@ -496,6 +491,25 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
         );
         Assert.isFalse(loanList.isEmpty(), "尚未找到该物资的借出信息!");
         Assert.isFalse(loanList.size() > 1, "该物资的借出信息出现多条!");
+        // 1.查询物资信息
+        IsMaterials materials = isMaterialsService.getById(dto.getMaterialsId());
+        // 1.1 如果不是归还到原先的柜子,则不能更新归还记录,存储归还异常等待处理,并且更新物资状态异常
+        if (!materials.getMaterialsCabinetId().equals(dto.getRestitutionToId())) {
+            IsMaterialsLoanException loanException = new IsMaterialsLoanException();
+            loanException.setMaterialsId(dto.getMaterialsId());
+            loanException.setMaterialsLoanId(loanList.get(0).getMaterialsLoanId());
+            loanException.setLoanFromId(materials.getMaterialsCabinetId());
+            loanException.setLoanTime(loanList.get(0).getLoanTime());
+            loanException.setRestitutionUserId(dto.getRestitutionUserId());
+            loanException.setRestitutionToId(dto.getRestitutionToId());
+            loanException.setActualRestitutionTime(new Date());
+            isMaterialsLoanExceptionService.save(loanException);
+            isMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
+                    .eq(IsMaterials::getMaterialsId, materials.getMaterialsId())
+                    .set(IsMaterials::getLoanState, "0")
+                    .set(IsMaterials::getStatus, "3"));
+            return true;
+        }
         // 2.开始更新loan表数据
         boolean update = update(Wrappers.<IsMaterialsLoan>lambdaUpdate()
                 .eq(IsMaterialsLoan::getMaterialsLoanId, loanList.get(0).getMaterialsLoanId())
@@ -506,7 +520,19 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
         // 3.开始更新物资信息
         isMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
                 .eq(IsMaterials::getMaterialsId, dto.getMaterialsId())
-                .set(IsMaterials::getLoanState, 1));
+                .set(IsMaterials::getLoanState, 1)
+                .set(IsMaterials::getStatus, 0));
+        // 3.1 检查当前物资是否有未处理的错换柜子异常,如果有,现在已经还对了,默认处理掉异常信息
+        List<IsMaterialsLoanException> exList = isMaterialsLoanExceptionService.list(Wrappers.<IsMaterialsLoanException>lambdaQuery()
+                .eq(IsMaterialsLoanException::getMaterialsId, dto.getMaterialsId())
+                .eq(IsMaterialsLoanException::getStatus, "0"));
+        if (!exList.isEmpty()) {
+            isMaterialsLoanExceptionService.update(Wrappers.<IsMaterialsLoanException>lambdaUpdate()
+                    .eq(IsMaterialsLoanException::getMaterialsId, dto.getMaterialsId())
+                    .eq(IsMaterialsLoanException::getStatus, "0")
+                    .set(IsMaterialsLoanException::getStatus, "1")
+            );
+        }
         // 5.检查邮件里面的数据发送了没有,没有发送就取消掉
         // 6.借用到期模板
         IsMailTemplate reminderTemp = iIsMailTemplateService.getOne(Wrappers.<IsMailTemplate>lambdaQuery()

+ 4 - 2
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsServiceImpl.java

@@ -135,6 +135,8 @@ public class IsMaterialsServiceImpl extends ServiceImpl<IsMaterialsMapper, IsMat
             isMaterials.setLoanState("1");
         }
         isMaterials.setUpdateTime(DateUtils.getNowDate());
+        // 4.设定当前物资所处柜子,如果当前物资没有被使用,只是更改绑定,则同步柜子,否则不变
+        IsMaterials materials = getById(isMaterials.getMaterialsId());
         return isMaterialsMapper.updateIsMaterials(isMaterials);
     }
 
@@ -203,14 +205,14 @@ public class IsMaterialsServiceImpl extends ServiceImpl<IsMaterialsMapper, IsMat
                 // 4.开始更新借出表信息
                 if ("0".equals(dto.getLoanState())) {
                     Assert.notNull(dto.getLoanUserId(), "请告诉我借取人员信息!");
-                    // 4.1开始新增记录表
+                    // 4.1开始新增借出记录表
                     AddLoanDTO addMaterialsLoan = new AddLoanDTO();
                     addMaterialsLoan.setMaterialsId(dto.getMaterialsId());
                     addMaterialsLoan.setLoanUserId(dto.getLoanUserId());
                     iIsMaterialsLoanService.insertIsMaterialsLoan(addMaterialsLoan);
                 } else if ("1".equals(dto.getLoanState())) {
                     Assert.notNull(dto.getRestitutionUserId(), "请告诉我归还人员信息!");
-                    // 4.2开始更新记录表
+                    // 4.2开始更新归还记录表
                     ReturnLoanDTO returnLoanDTO = new ReturnLoanDTO();
                     returnLoanDTO.setMaterialsId(dto.getMaterialsId());
                     returnLoanDTO.setRestitutionUserId(dto.getRestitutionUserId());

+ 43 - 0
ktg-iscs/src/main/resources/mapper/IsMaterialsLoanExceptionMapper.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ktg.iscs.mapper.IsMaterialsLoanExceptionMapper">
+
+    <select id="getIsMaterialsLoanExceptionPage"
+            resultType="com.ktg.iscs.domain.vo.exception.IsMaterialsLoanExceptionPageVO">
+        SELECT
+            e.*,
+            m.materials_name,
+            c1.cabinet_name AS loan_from_name,
+            c2.cabinet_name AS restitution_to_name,
+            u.nick_name AS restitution_user_name
+        FROM
+            is_materials_loan_exception e
+                LEFT JOIN is_materials m ON e.materials_id = m.materials_id
+                LEFT JOIN is_materials_cabinet c1 ON c1.cabinet_id = e.loan_from_id
+                LEFT JOIN is_materials_cabinet c2 ON c2.cabinet_id = e.restitution_to_id
+                LEFT JOIN sys_user u ON u.user_id = e.restitution_user_id
+        <where>
+            <if test="dto.materialsName != null and dto.materialsName.trim != ''">
+                and m.materials_name like concat('%',#{dto.materialsName},'%')
+            </if>
+            <if test="dto.restitutionUserName != null and dto.restitutionUserName.trim != ''">
+                and u.nick_name like concat('%',#{dto.restitutionUserName},'%')
+            </if>
+            <if test="dto.loanFromId != null">
+                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}
+            </if>
+            <if test="dto.endTime != null and dto.endTime.trim != ''">
+                and e.loan_time &lt;= #{dto.endTime}
+            </if>
+            <if test="dto.status != null and dto.status.trim != ''">
+                and e.status = #{dto.status}
+            </if>
+        </where>
+        order by e.exception_id desc
+    </select>
+</mapper>