hecheng 3 gadi atpakaļ
vecāks
revīzija
893ed6a624
18 mainītis faili ar 616 papildinājumiem un 21 dzēšanām
  1. 3 2
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/AlarmRecord.java
  2. 3 3
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/BottleStorage.java
  3. 3 2
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/BottleStorageError.java
  4. 4 3
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/BottleStorageOut.java
  5. 4 3
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/UseRecord.java
  6. 2 2
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/UsegasApply.java
  7. 3 2
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/UsegasAuditRecord.java
  8. 65 0
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/dto/UseRecordDto.java
  9. 28 0
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/vo/AirAmount.java
  10. 116 0
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/vo/AlarmRecordVo.java
  11. 4 0
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/vo/UseRecordVo.java
  12. 37 0
      zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/vo/WebUseRecordVo.java
  13. 27 0
      zd-modules/zd-bottle-parent/zd-bottle/src/main/java/com/zd/bottle/mapper/UseRecordMapper.java
  14. 66 0
      zd-modules/zd-bottle-parent/zd-bottle/src/main/java/com/zd/bottle/service/UseRecordService.java
  15. 193 3
      zd-modules/zd-bottle-parent/zd-bottle/src/main/java/com/zd/bottle/service/impl/UseRecordServiceImpl.java
  16. 56 0
      zd-modules/zd-bottle-parent/zd-bottle/src/main/resources/mapper/UseRecordMapper.xml
  17. 1 1
      zd-modules/zd-forward/src/main/java/com/zd/forward/controller/SignInCheckController.java
  18. 1 0
      zd-modules/zd-forward/src/main/java/com/zd/forward/utils/HttpUtils.java

+ 3 - 2
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/AlarmRecord.java

@@ -8,7 +8,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
 
-import java.sql.Timestamp;
+import java.util.Date;
+
 
 /**
  * <p>
@@ -38,5 +39,5 @@ public class AlarmRecord extends BaseBean{
     private Byte productType;
 
     @ApiModelProperty("报警时间")
-    private Timestamp alarmTime;
+    private Date alarmTime;
 }

+ 3 - 3
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/BottleStorage.java

@@ -9,7 +9,7 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
-import java.sql.Timestamp;
+
 import java.util.Date;
 
 /**
@@ -76,13 +76,13 @@ public class BottleStorage extends BaseBean {
     private Long rejectionApplyUserid;
 
     @ApiModelProperty("拒收发起时间")
-    private Timestamp rejectionApplyTime;
+    private Date rejectionApplyTime;
 
     @ApiModelProperty("拒收处理人id")
     private Long rejectionUserid;
 
     @ApiModelProperty("拒收处理时间")
-    private Timestamp rejectionTime;
+    private Date rejectionTime;
 
     @ApiModelProperty("待办清单详情表id")
     private Long taskDetailId;

+ 3 - 2
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/BottleStorageError.java

@@ -9,7 +9,8 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
-import java.sql.Timestamp;
+import java.util.Date;
+
 
 /**
  * <p>
@@ -42,7 +43,7 @@ public class BottleStorageError extends BaseBean {
     private BigDecimal afterEdit;
 
     @ApiModelProperty("操作时间")
-    private Timestamp opTime;
+    private Date opTime;
 
     @ApiModelProperty("联系方式")
     private String phone;

+ 4 - 3
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/BottleStorageOut.java

@@ -9,7 +9,8 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
-import java.sql.Timestamp;
+import java.util.Date;
+
 
 /**
  * <p>
@@ -56,10 +57,10 @@ public class BottleStorageOut extends BaseBean{
     private String disposeUsername;
 
     @ApiModelProperty("处理时间")
-    private Timestamp disposeTime;
+    private Date disposeTime;
 
     @ApiModelProperty("实际出库时间")
-    private Timestamp completeTime;
+    private Date completeTime;
 
     @ApiModelProperty("实际出库确认用户id")
     private Long completeUserid;

+ 4 - 3
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/UseRecord.java

@@ -9,7 +9,8 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
-import java.sql.Timestamp;
+import java.util.Date;
+
 
 /**
  * <p>
@@ -60,8 +61,8 @@ public class UseRecord extends BaseBean {
     private BigDecimal amount;
 
     @ApiModelProperty("使用时间")
-    private Timestamp useTime;
+    private Date useTime;
 
     @ApiModelProperty("归还时间")
-    private Timestamp backTime;
+    private Date backTime;
 }

+ 2 - 2
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/UsegasApply.java

@@ -8,7 +8,7 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
 
-import java.sql.Timestamp;
+
 import java.util.Date;
 
 /**
@@ -78,7 +78,7 @@ public class UsegasApply extends BaseBean {
     private String leadAuditUsername;
 
     @ApiModelProperty("审核时间")
-    private Timestamp leadAuditTime;
+    private Date leadAuditTime;
 
     @ApiModelProperty("原因(实验室负责人)")
     private String leadAuditCause;

+ 3 - 2
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/domain/UsegasAuditRecord.java

@@ -8,7 +8,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
 
-import java.sql.Timestamp;
+import java.util.Date;
+
 
 /**
  * <p>
@@ -32,7 +33,7 @@ public class UsegasAuditRecord extends BaseBean {
     private String auditUser;
 
     @ApiModelProperty("审核时间")
-    private Timestamp auditTime;
+    private Date auditTime;
 
     @ApiModelProperty("审核状态(0未审核1.通过 2.驳回)")
     private Long auditStatus;

+ 65 - 0
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/dto/UseRecordDto.java

@@ -0,0 +1,65 @@
+package com.zd.bottle.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel("气瓶库存视图")
+@Data
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+public class UseRecordDto {
+
+    /** 主键id,数据唯一标识 */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+    /** 联系人 */
+    @ApiModelProperty(value = "联系人")
+    private String contacts;
+    /** 联系方式 */
+    @ApiModelProperty(value = "联系方式")
+    private String phone;
+    /** 实验地点 */
+    @ApiModelProperty(value = "实验地点")
+    private String location;
+    /** 气瓶ID */
+    @ApiModelProperty(value = "气瓶ID")
+    private Long storageId;
+    /** 气瓶名称 */
+    @ApiModelProperty(value = "气瓶名称")
+    private String bottleName;
+    /** 使用前照片 */
+    @ApiModelProperty(value = "使用前照片")
+    private String beforeUsePic;
+    /** 使用前气压 */
+    @ApiModelProperty(value = "使用前气压")
+    private BigDecimal beforeUse;
+    /** 使用后照片 */
+    @ApiModelProperty(value = "使用后照片")
+    private String afterUsePic;
+    /** 使用后气压 */
+    @ApiModelProperty(value = "使用后气压")
+    private BigDecimal afterUse;
+    /** 使用量 */
+    @ApiModelProperty(value = "使用量")
+    private BigDecimal amount;
+    /** 使用时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "使用时间")
+    private Date useTime;
+    /** 归还时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "归还时间")
+    private Date backTime;
+
+    @ApiModelProperty(value = "余量不符(0:正常,1:余量不符 默认为0)")
+    private Integer isSurplus;
+}

+ 28 - 0
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/vo/AirAmount.java

@@ -0,0 +1,28 @@
+package com.zd.bottle.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author Administrator
+ */
+@ApiModel("信息记录统计视图类")
+@Data
+public class AirAmount {
+
+    @ApiModelProperty("年月")
+    private String date;
+    @ApiModelProperty("楼栋名称/实验室名称")
+    private String name;
+    @ApiModelProperty("入库数量/气瓶库存数/楼栋库存数")
+    private Integer inNum;
+    @ApiModelProperty("出库数量")
+    private Integer outNum;
+    @ApiModelProperty("用气量")
+    private BigDecimal amount;
+    @ApiModelProperty("气瓶数")
+    private Integer bottleNum;
+}

+ 116 - 0
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/vo/AlarmRecordVo.java

@@ -0,0 +1,116 @@
+package com.zd.bottle.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zd.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * @author Administrator
+ */
+@ApiModel("报警记录")
+@Data
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+public class AlarmRecordVo {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+    /**
+     * 数据主键,关联其他业务表中的数据id
+     */
+    @ApiModelProperty(value = "数据主键,关联其他业务表中的数据id")
+    private Long masterId;
+    /**
+     * 报警类型;1:出门,2:进门
+     */
+    @ApiModelProperty(value = "报警类型;1:出门,2:进门")
+    private Integer type;
+    /**
+     * 产品类型;1:气瓶,2:其他
+     */
+    @ApiModelProperty(value = "产品类型;1:气瓶,2:其他")
+    private Integer productType;
+
+    /**
+     * 当前使用人
+     */
+    @Excel(name = "当前使用人" )
+    @ApiModelProperty(value = "当前使用人")
+    private String currentUser;
+    /**
+     * 联系方式
+     */
+    @Excel(name = "联系方式" )
+    @ApiModelProperty(value = "联系方式")
+    private String currentPhone;
+
+    /**
+     * 气瓶所有人id
+     */
+    @ApiModelProperty(value = "气瓶所有人id")
+    private Long ownerId;
+
+    /**
+     * 气瓶所有人
+     */
+    @Excel(name = "气瓶所有人" )
+    @ApiModelProperty(value = "气瓶所有人")
+    private String owner;
+
+    /**
+     * 联系方式
+     */
+    @Excel(name = "联系方式" )
+    @ApiModelProperty(value = "联系方式")
+    private String ownerPhone;
+
+    /**
+     * 实验地点
+     */
+    @Excel(name = "实验地点" )
+    @ApiModelProperty(value = "实验地点")
+    private String location;
+
+    /**
+     * 气体名称
+     */
+    @Excel(name = "气体名称" )
+    @ApiModelProperty(value = "气体名称")
+    private String airName;
+    /**
+     * 气瓶规格
+     */
+    @Excel(name = "气瓶级别/规格" )
+    @ApiModelProperty(value = "气瓶规格")
+    private String configName;
+    /**
+     * 气瓶余量
+     */
+    @ApiModelProperty(value = "气瓶余量")
+    private Double currentPressure;
+
+    /**
+     * 气瓶余量导出字段
+     */
+    @Excel(name = "气瓶余量" )
+    private String currentPressureValue;
+    /**
+     * 报警时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "使用时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "报警时间")
+    private Date alarmTime;
+
+}

+ 4 - 0
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/vo/UseRecordVo.java

@@ -1,6 +1,7 @@
 package com.zd.bottle.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zd.bottle.domain.BottleStorage;
 import com.zd.common.core.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -125,4 +126,7 @@ public class UseRecordVo {
 
     @ApiModelProperty(value = "格式化后的归还时间")
     private String backTimeApp;
+
+    @ApiModelProperty(value = "气瓶入库信息")
+    private BottleStorage storage;
 }

+ 37 - 0
zd-modules/zd-bottle-parent/zd-bottle-api/src/main/java/com/zd/bottle/vo/WebUseRecordVo.java

@@ -0,0 +1,37 @@
+package com.zd.bottle.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ */
+@ApiModel("管理端使用记录详情视图")
+@Data
+@Accessors(chain = true)
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = false)
+public class WebUseRecordVo {
+
+    @ApiModelProperty("气瓶编号")
+    private String airNumber;
+
+    @ApiModelProperty("气体名称")
+    private String airName;
+    @ApiModelProperty(value = "气瓶规格名称")
+    private String configName;
+    @ApiModelProperty("气瓶厂家")
+    private String companyName;
+    @ApiModelProperty("气体组分")
+    private String airConstituents;
+    @ApiModelProperty(value = "入库状态 1闲置 2使用 3出库")
+    private Integer storageStatus;
+
+    private List<UseRecordVo> recordVos;
+}

+ 27 - 0
zd-modules/zd-bottle-parent/zd-bottle/src/main/java/com/zd/bottle/mapper/UseRecordMapper.java

@@ -2,6 +2,11 @@ package com.zd.bottle.mapper;
 
 import com.zd.bottle.domain.UseRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zd.bottle.vo.AirAmount;
+import com.zd.bottle.vo.UseRecordVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,26 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface UseRecordMapper extends BaseMapper<UseRecord> {
 
+    /**
+     * 信息统计查询使用记录列表
+     * @param storageId 库存主ID
+     * @return 集合对象
+     */
+    List<UseRecordVo> getBottleInfoByStorageId(Long storageId);
+
+    /**
+     * 用气量统计
+     *
+     * @param airName 气体名称
+     * @return 数据集合
+     */
+    List<AirAmount> calcRepertory(@Param("airName") String airName);
+
+    /**
+     * 用气量信息统计
+     *
+     * @param airName 气体名称
+     * @return 数据集合
+     */
+    List<AirAmount> calcAmount(@Param("airName") String airName);
 }

+ 66 - 0
zd-modules/zd-bottle-parent/zd-bottle/src/main/java/com/zd/bottle/service/UseRecordService.java

@@ -2,7 +2,10 @@ package com.zd.bottle.service;
 
 import com.zd.bottle.domain.UseRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zd.bottle.dto.UseRecordDto;
+import com.zd.bottle.vo.AirAmount;
 import com.zd.bottle.vo.UseRecordVo;
+import com.zd.bottle.vo.WebUseRecordVo;
 
 import java.util.List;
 
@@ -29,4 +32,67 @@ public interface UseRecordService extends IService<UseRecord> {
      * @return List
      */
     List<UseRecord> getList(UseRecord useRecord);
+
+    /**
+     * 信息统计查询使用记录列表
+     * @param storageId 库存主ID
+     * @return 集合对象
+     */
+    List<UseRecordVo> getBottleInfoByStorageId(Long storageId);
+    /**
+     * 管理端端获取使用记录详细信息
+     * @param id 记录ID
+     * @return 组合数据
+     */
+    WebUseRecordVo getBottleInfo(Long id);
+
+    /**
+     * 管理端端获取使用记录详细信息
+     * @param storageId 气瓶ID
+     * @return 组合数据
+     */
+    WebUseRecordVo getBottleRecord(Long storageId);
+
+    /**
+     * 出入库信息统计
+     * @param airName 气体名称
+     * @return 数据集合
+     */
+    List<AirAmount> calcRepertory(String airName);
+
+    /**
+     * 用气量信息统计
+     * @param airName 气体名称
+     * @return 数据集合
+     */
+    List<AirAmount> calcAmount(String airName);
+
+    /**
+     * 新增使用记录
+     *
+     * @param recordDto 使用记录
+     * @return 结果
+     */
+    Integer add(UseRecordDto recordDto);
+    /**
+     * 修改使用记录
+     *
+     * @param useRecord 使用记录
+     * @return 结果
+     */
+    Integer updateUseRecord(UseRecord useRecord);
+
+    /**
+     * 当前登录人的气瓶使用记录
+     * @param useRecord 参数
+     * @return List
+     */
+    List<UseRecord> getByUserId(UseRecord useRecord);
+
+    /**
+     * 根据气瓶ID查询
+     * @param storageId 气瓶主键
+     * @return List
+     */
+    List<UseRecord> getByStorageId(Long storageId);
 }

+ 193 - 3
zd-modules/zd-bottle-parent/zd-bottle/src/main/java/com/zd/bottle/service/impl/UseRecordServiceImpl.java

@@ -1,20 +1,40 @@
 package com.zd.bottle.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.zd.bottle.domain.BottleStorage;
+import com.zd.bottle.domain.BottleStorageError;
 import com.zd.bottle.domain.UseRecord;
+import com.zd.bottle.domain.UsegasApply;
+import com.zd.bottle.dto.UseRecordDto;
 import com.zd.bottle.mapper.UseRecordMapper;
+import com.zd.bottle.service.BottleStorageErrorService;
 import com.zd.bottle.service.BottleStorageService;
 import com.zd.bottle.service.UseRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zd.bottle.service.UsegasApplyService;
+import com.zd.bottle.vo.AirAmount;
 import com.zd.bottle.vo.UseRecordVo;
+import com.zd.bottle.vo.WebUseRecordVo;
+import com.zd.common.core.constant.HttpStatus;
+import com.zd.common.core.constant.SecurityConstants;
+import com.zd.common.core.domain.R;
+import com.zd.common.core.exception.ServiceException;
+import com.zd.common.core.utils.DateUtils;
+import com.zd.common.core.utils.SecurityUtils;
 import com.zd.common.core.utils.bean.TransferUtils;
+import com.zd.common.security.service.TokenService;
+import com.zd.common.security.utils.SaveUtil;
+import com.zd.system.api.RemoteUserService;
+import com.zd.system.api.model.LoginUser;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -30,6 +50,14 @@ public class UseRecordServiceImpl extends ServiceImpl<UseRecordMapper, UseRecord
 
     @Resource
     private BottleStorageService storageService;
+    @Resource
+    private RemoteUserService userService;
+    @Resource
+    private UsegasApplyService usegasApplyService;
+    @Resource
+    private BottleStorageErrorService errorService;
+    @Resource
+    private TokenService tokenService;
 
     @Override
     public List<UseRecordVo> getListVo(List<UseRecord> records) {
@@ -41,7 +69,7 @@ public class UseRecordServiceImpl extends ServiceImpl<UseRecordMapper, UseRecord
             Long storageId = u.getStorageId();
             if (storageMap.containsKey(storageId)) {
                 BottleStorage bottleStorage = storageMap.get(storageId);
-                u.setAirName(bottleStorage.getAirBottleName());
+                u.setAirName(bottleStorage.getAirBottleName()).setStorage(bottleStorage);
             }
         });
         return recordVos;
@@ -53,4 +81,166 @@ public class UseRecordServiceImpl extends ServiceImpl<UseRecordMapper, UseRecord
         queryWrapper.setEntity(useRecord);
         return list(queryWrapper);
     }
+
+    @Override
+    public List<UseRecordVo> getBottleInfoByStorageId(Long storageId) {
+        return this.baseMapper.getBottleInfoByStorageId(storageId);
+    }
+
+    @Override
+    public WebUseRecordVo getBottleInfo(Long id) {
+        // 获取使用记录
+        UseRecord useRecord = getById(id);
+        Long storageId = useRecord.getStorageId();
+        List<UseRecord> records = getByStorageId(storageId);
+        return getWebUseRecordVo(records, storageId);
+    }
+
+    @Override
+    public WebUseRecordVo getBottleRecord(Long storageId) {
+        // 获取使用记录
+        List<UseRecord> useRecords = getByStorageId(storageId);
+        WebUseRecordVo recordVo = getWebUseRecordVo(useRecords, storageId);
+        List<UseRecordVo> recordVos = Optional.ofNullable(recordVo.getRecordVos()).orElseGet(Collections::emptyList);
+
+        Map<Long, Long> recordCount = recordVos.stream().collect(Collectors.groupingBy(UseRecordVo::getUserId, Collectors.counting()));
+
+        recordVos = recordVos.stream().collect(Collectors.toCollection(() ->
+                        new TreeSet<>(Comparator.comparing(UseRecordVo::getUserId))))
+                .stream().map(r -> r.setCountNumber(Math.toIntExact(recordCount.get(r.getUserId()))))
+                .sorted(Comparator.comparing(UseRecordVo::getUseTime).reversed())
+                .collect(Collectors.toList());
+
+        recordVo.setRecordVos(recordVos);
+        return recordVo;
+    }
+
+    @Override
+    public List<UseRecord> getByStorageId(Long storageId) {
+        LambdaQueryWrapper<UseRecord> queryWrapper = Wrappers.lambdaQuery(UseRecord.class);
+        queryWrapper.eq(UseRecord::getStorageId, storageId);
+        return list(queryWrapper);
+    }
+
+    @Override
+    public List<AirAmount> calcRepertory(String airName) {
+        return baseMapper.calcRepertory(airName);
+    }
+
+    @Override
+    public List<AirAmount> calcAmount(String airName) {
+        return baseMapper.calcAmount(airName);
+    }
+
+    @Override
+    public Integer add(UseRecordDto recordDto) {
+        int result = 1;
+        R<LoginUser> userInfo = userService.getUserInfo(SecurityUtils.getUsername(), SecurityConstants.INNER);
+        if (userInfo.getCode() != HttpStatus.SUCCESS || userInfo.getData() == null) {
+            throw new ServiceException("用户账号异常");
+        }
+        //查询用户使用资格
+        LoginUser user = userInfo.getData();
+        Long storageId = recordDto.getStorageId();
+        LambdaQueryWrapper<UsegasApply> queryWrapper = Wrappers.lambdaQuery(UsegasApply.class);
+        queryWrapper.eq(UsegasApply::getUserId, user.getSysUser().getUserId())
+                .ge(UsegasApply::getEndTime, new Date())
+                //todo 气体ID待确认
+                .eq(UsegasApply::getUseGasName, recordDto.getBottleName());
+        UsegasApply usegasApply = usegasApplyService.getOne(queryWrapper);
+        if (usegasApply == null) {
+            result = 3;
+        }
+        LambdaQueryWrapper<UseRecord> wrapper = Wrappers.lambdaQuery(UseRecord.class);
+        wrapper.eq(UseRecord::getStorageId, storageId)
+                .eq(UseRecord::getBackTime, null);
+        if (getOne(wrapper) != null) {
+            result = 4;
+        }
+        if (result != 1) {
+            return result;
+        }
+
+        recordDto.setContacts(user.getSysUser().getNickName())
+                .setPhone(user.getSysUser().getPhonenumber())
+                .setUseTime(Calendar.getInstance().getTime());
+        UseRecord useRecord = new UseRecord();
+        BeanUtils.copyProperties(recordDto, useRecord);
+
+        BottleStorage storage = storageService.getById(useRecord.getStorageId());
+        if (storage == null) {
+            throw new ServiceException("气瓶不存在");
+        }
+
+        LambdaUpdateWrapper<BottleStorage> updateWrapper = Wrappers.lambdaUpdate(BottleStorage.class);
+        updateWrapper.eq(BottleStorage::getId, useRecord.getStorageId()).set(BottleStorage::getStorageStatus,2);
+        Integer isSurplus = recordDto.getIsSurplus();
+        if (isSurplus == 1) {
+            // 修改库存中气瓶余量标记
+            storage.setIsSurplus(isSurplus).setCurrentPressure(useRecord.getBeforeUse());
+            BottleStorageError bottleStorageError = new BottleStorageError();
+            bottleStorageError.setStorageId(useRecord.getStorageId())
+                    .setBeforeEdit(storage.getCurrentPressure())
+                    .setAfterEdit(useRecord.getBeforeUse());
+            errorService.save(bottleStorageError);
+        }
+        if (!storageService.update(updateWrapper)) {
+            throw new ServiceException("入库数据异常");
+        }
+        //设置其他公共字段
+        useRecord.setUserId(user.getUserid());
+        useRecord.setCommonValue(user.getSysUser().getUserName());
+        if (save(useRecord)) {
+            return result;
+        }
+        throw new ServiceException("使用登记记录错误");
+    }
+
+    @Override
+    public Integer updateUseRecord(UseRecord useRecord) {
+        Long storageId = useRecord.getStorageId();
+        LambdaQueryWrapper<UseRecord> queryWrapper = Wrappers.lambdaQuery(UseRecord.class);
+        queryWrapper.eq(UseRecord::getStorageId,storageId).eq(UseRecord::getBackTime,null);
+        UseRecord temp = getOne(queryWrapper);
+        if (temp==null) {
+            throw new ServiceException("数据异常");
+        }
+        BigDecimal afterUse = useRecord.getAfterUse();
+        BigDecimal beforeUse = temp.getBeforeUse();
+        if (afterUse.compareTo(beforeUse) > 0) {
+            throw new ServiceException("使用后的气压不能大于使用前的气压");
+        }
+        if (ObjectUtil.isNotEmpty(beforeUse) && ObjectUtil.isNotEmpty(afterUse)) {
+            useRecord.setAmount(beforeUse.subtract(afterUse));
+            useRecord.setBackTime(Calendar.getInstance().getTime());
+        }
+        //修改库存中气瓶余量
+        BottleStorage storage = storageService.getById(storageId);
+        storage.setStorageStatus(1);
+        storage.setCurrentPressure(afterUse);
+        storage.setId(storage.getId());
+        storageService.updateById(storage);
+
+        useRecord.setId(temp.getId());
+        useRecord.setCommonValue(SecurityUtils.getUsername());
+        return baseMapper.updateById(useRecord);
+    }
+
+    @Override
+    public List<UseRecord> getByUserId(UseRecord useRecord) {
+        Long userId = tokenService.getLoginUser().getSysUser().getUserId();
+        LambdaQueryWrapper<UseRecord> queryWrapper = Wrappers.lambdaQuery(UseRecord.class);
+        queryWrapper.eq(UseRecord::getUserId,userId);
+        return list(queryWrapper);
+    }
+
+    private WebUseRecordVo getWebUseRecordVo(List<UseRecord> useRecords, Long storageId) {
+        List<UseRecordVo> recordVos = TransferUtils.transferList(useRecords, UseRecordVo.class);
+        BottleStorage storage = storageService.getById(storageId);
+        // 获取入库信息
+        //气瓶名称等相关内容
+        WebUseRecordVo recordVo = new WebUseRecordVo();
+        BeanUtils.copyProperties(storage, recordVo);
+        return recordVo.setRecordVos(recordVos);
+    }
 }

+ 56 - 0
zd-modules/zd-bottle-parent/zd-bottle/src/main/resources/mapper/UseRecordMapper.xml

@@ -33,5 +33,61 @@
         update_time,
         contacts, user_id, phone, location, subject_id, storage_id, before_use_pic, before_use, after_use_pic, after_use, amount, use_time, back_time
     </sql>
+    <select id="getBottleInfoByStorageId" resultType="com.zd.bottle.vo.UseRecordVo"
+            parameterType="java.lang.Long">
+        SELECT ur.contacts,
+               ur.phone,
+               (SELECT COUNT(1)
+                FROM ab_use_record r
+                WHERE r.user_id = ur.user_id
+                  AND r.storage_id = ur.storage_id
+                GROUP BY r.user_id) count_number,
+               (SELECT SUM(r.amount)
+                FROM ab_use_record r
+                WHERE r.user_id = ur.user_id
+                  AND r.storage_id = ur.storage_id
+                GROUP BY r.user_id) as amount,
+               ur.use_time
+        FROM ab_use_record ur
+        WHERE id IN (SELECT max(id)
+                     FROM ab_use_record
+                     WHERE storage_id = #{storageId}
+                       AND use_time IS NOT NULL
+                     GROUP BY user_id)
+    </select>
+    <select id="calcRepertory" resultType="com.zd.bottle.vo.AirAmount" parameterType="java.lang.String">
+        SELECT
+        DATE_FORMAT( S.create_time, '%Y年-%m月' ) date,
+        COUNT( s.id ) inNum,
+        COUNT( o.id ) outNum
+        FROM
+        ab_bottle_storage s
+        LEFT JOIN ab_bottle_storage_out o ON s.id = o.storage_id
+        WHERE
+        s.air_status=0 AND DATE_FORMAT( s.create_time, '%Y-%m' )> DATE_FORMAT( date_sub( curdate(), INTERVAL 12 MONTH ),
+        '%Y-%m' )
+        <if test="airName != null and airName!=''">
+            and s.air_bottle_name=#{airName}
+        </if>
+        GROUP BY
+        MONTH (s.create_time
+        )
+    </select>
+    <select id="calcAmount" resultType="com.zd.bottle.vo.AirAmount" parameterType="java.lang.String">
+        SELECT
+        DATE_FORMAT( r.create_time, '%Y年-%m月' ) date,
+        SUM(r.amount) as amount
+        FROM
+        ab_use_record r
+        INNER JOIN ab_bottle_storage s ON r.storage_id=s.id
+        WHERE
+        DATE_FORMAT( r.create_time, '%Y-%m' )> DATE_FORMAT( date_sub( curdate(), INTERVAL 12 MONTH ), '%Y-%m' )
+        <if test="airName != null and airName!=''">
+            and s.specification_name LIKE concat( '%', #{airName}, '%' ) )
+        </if>
+        GROUP BY
+        MONTH (r.create_time
+        )
+    </select>
 
 </mapper>

+ 1 - 1
zd-modules/zd-forward/src/main/java/com/zd/forward/controller/SignInCheckController.java

@@ -82,7 +82,7 @@ public class SignInCheckController {
     public R checkInAll(@ApiParam("进出记录ID") @RequestParam("id") Long id,
                         @ApiParam("图片文件") @RequestParam("file") MultipartFile file,
                         @ApiParam("实验室ID") @RequestParam("subId") Long subId) {
-
+        logger.info("================>id:"+id,",subId:"+subId);
         return checkService.checkAndCommit(id, file, subId);
     }
 

+ 1 - 0
zd-modules/zd-forward/src/main/java/com/zd/forward/utils/HttpUtils.java

@@ -74,6 +74,7 @@ public class HttpUtils {
         String[] filename = originalFilename.split("\\.");
         File toFile = File.createTempFile(filename[0], "." + filename[1]);
         file.transferTo(toFile);
+        log.info("================>{}",toFile.getAbsoluteFile());
         //toFile.deleteOnExit();//在jvm 退出时删除
         return toFile;
     }