فهرست منبع

add:设备出入库管理(包含sop 填报 设备保障)

caozixuan 1 سال پیش
والد
کامیت
2b8c6e2ed3

+ 99 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/DeviceInOutForm.java

@@ -0,0 +1,99 @@
+package com.qmth.sop.business.bean.params;
+
+import com.qmth.sop.common.enums.DeviceStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 设备出入库登记表单
+ * @Author: CaoZixuan
+ * @Date: 2023-08-24
+ */
+public class DeviceInOutForm {
+    @ApiModelProperty("设备编号")
+    private String deviceNo;
+
+    @ApiModelProperty("设备品牌")
+    private String deviceBrand;
+
+    @ApiModelProperty("供应商")
+    private String supplierName;
+
+    @ApiModelProperty("设备状态")
+    private DeviceStatusEnum deviceStatus;
+
+    @ApiModelProperty("扫描量")
+    private Integer scanCount;
+
+    @ApiModelProperty("当前所在地")
+    private String location;
+
+    @ApiModelProperty("发往地")
+    private String address;
+
+    @ApiModelProperty("快递单拍照")
+    private String basePhotoPath;
+
+    public String getDeviceNo() {
+        return deviceNo;
+    }
+
+    public void setDeviceNo(String deviceNo) {
+        this.deviceNo = deviceNo;
+    }
+
+    public String getDeviceBrand() {
+        return deviceBrand;
+    }
+
+    public void setDeviceBrand(String deviceBrand) {
+        this.deviceBrand = deviceBrand;
+    }
+
+    public String getSupplierName() {
+        return supplierName;
+    }
+
+    public void setSupplierName(String supplierName) {
+        this.supplierName = supplierName;
+    }
+
+    public DeviceStatusEnum getDeviceStatus() {
+        return deviceStatus;
+    }
+
+    public void setDeviceStatus(DeviceStatusEnum deviceStatus) {
+        this.deviceStatus = deviceStatus;
+    }
+
+    public Integer getScanCount() {
+        return scanCount;
+    }
+
+    public void setScanCount(Integer scanCount) {
+        this.scanCount = scanCount;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getBasePhotoPath() {
+        return basePhotoPath;
+    }
+
+    public void setBasePhotoPath(String basePhotoPath) {
+        this.basePhotoPath = basePhotoPath;
+    }
+}

+ 88 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/DeviceInOutSubmitParam.java

@@ -0,0 +1,88 @@
+package com.qmth.sop.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.common.enums.InOutTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description: 出入库提交参数
+ * @Author: CaoZixuan
+ * @Date: 2023-08-24
+ */
+public class DeviceInOutSubmitParam {
+    @ApiModelProperty("服务单元id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceUnitId;
+
+    @ApiModelProperty("派单号")
+    private String crmNo;
+
+    @ApiModelProperty("sop号")
+    private String sopNo;
+
+    @ApiModelProperty("出入库时间")
+    @Range(min = 1L,message = "缺少出入库时间")
+    private Long inOutTime;
+
+    @ApiModelProperty("出入库类型")
+    @NotNull(message = "缺少出入库类型")
+    private InOutTypeEnum inOutType;
+
+    @ApiModelProperty("出入库登记单")
+    @NotEmpty(message = "缺少出入库登记单")
+    private List<DeviceInOutForm> deviceInOutFormList;
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
+
+    public String getCrmNo() {
+        return crmNo;
+    }
+
+    public void setCrmNo(String crmNo) {
+        this.crmNo = crmNo;
+    }
+
+    public String getSopNo() {
+        return sopNo;
+    }
+
+    public void setSopNo(String sopNo) {
+        this.sopNo = sopNo;
+    }
+
+    public Long getInOutTime() {
+        return inOutTime;
+    }
+
+    public void setInOutTime(Long inOutTime) {
+        this.inOutTime = inOutTime;
+    }
+
+    public InOutTypeEnum getInOutType() {
+        return inOutType;
+    }
+
+    public void setInOutType(InOutTypeEnum inOutType) {
+        this.inOutType = inOutType;
+    }
+
+    public List<DeviceInOutForm> getDeviceInOutFormList() {
+        return deviceInOutFormList;
+    }
+
+    public void setDeviceInOutFormList(List<DeviceInOutForm> deviceInOutFormList) {
+        this.deviceInOutFormList = deviceInOutFormList;
+    }
+}

+ 10 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/DeviceInOutResult.java

@@ -31,6 +31,8 @@ public class DeviceInOutResult {
     private String deviceNo;
     @ApiModelProperty("设备品牌")
     private String deviceBrand;
+    @ApiModelProperty("扫描量")
+    private Integer scanCount;
 
     @ApiModelProperty("设备运行状态")
     private DeviceStatusEnum deviceStatus;
@@ -120,6 +122,14 @@ public class DeviceInOutResult {
         this.deviceBrand = deviceBrand;
     }
 
+    public Integer getScanCount() {
+        return scanCount;
+    }
+
+    public void setScanCount(Integer scanCount) {
+        this.scanCount = scanCount;
+    }
+
     public DeviceStatusEnum getDeviceStatus() {
         return deviceStatus;
     }

+ 11 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDeviceInOut.java

@@ -56,6 +56,9 @@ public class TBDeviceInOut implements Serializable {
     @ApiModelProperty(value = "供应商名称")
     private String supplierName;
 
+    @ApiModelProperty("当前所在地")
+    private String location;
+
     @ApiModelProperty(value = "发往地")
     private String address;
 
@@ -155,6 +158,14 @@ public class TBDeviceInOut implements Serializable {
         this.supplierName = supplierName;
     }
 
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
     public String getAddress() {
         return address;
     }

+ 27 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/TBDeviceInOutMapper.java

@@ -10,6 +10,8 @@ import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
 import com.qmth.sop.common.enums.InOutTypeEnum;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 设备出入库登记 Mapper 接口
@@ -68,4 +70,29 @@ public interface TBDeviceInOutMapper extends BaseMapper<TBDeviceInOut> {
                                                          @Param("inOutTimeEnd") Long inOutTimeEnd,
                                                          @Param("supplierId") Long supplierId,
                                                          @Param("customName") String customName);
+
+    /**
+     * 查询可出库设备信息
+     *
+     * @param supplierId 供应商id
+     * @param status     设备状态 -- 正常
+     * @param inOutType  设备最后一次出入库记录状态 -- 入库
+     * @return 可出库设备信息
+     */
+    List<DeviceInOutResult> findDeviceCanOutInfo(@Param("supplierId") Long supplierId,
+                                                 @Param("status") DeviceStatusEnum status,
+                                                 @Param("inOutType") InOutTypeEnum inOutType);
+
+
+    /**
+     * 查询可入库设备信息(sop项目入库需要有派单号)
+     *
+     * @param supplierId 供应商id
+     * @param inOutType  设备最后一次出入库记录状态 -- 出库
+     * @param crmNo      派单号
+     * @return 可入库设备信息
+     */
+    List<DeviceInOutResult> findDeviceCanInInfo(@Param("supplierId") Long supplierId,
+                                                @Param("inOutType") InOutTypeEnum inOutType,
+                                                @Param("crmNo") String crmNo);
 }

+ 25 - 4
sop-business/src/main/java/com/qmth/sop/business/service/TBDeviceInOutService.java

@@ -1,13 +1,16 @@
 package com.qmth.sop.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.bean.params.DeviceInOutSubmitParam;
 import com.qmth.sop.business.bean.result.DeviceInOutResult;
 import com.qmth.sop.business.entity.TBDeviceInOut;
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.sop.common.enums.DeviceStatusEnum;
 import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
 import com.qmth.sop.common.enums.InOutTypeEnum;
 
+import java.util.List;
+
 /**
  * <p>
  * 设备出入库登记 服务类
@@ -41,11 +44,29 @@ public interface TBDeviceInOutService extends IService<TBDeviceInOut> {
                                                       String deviceNo, String customName, String location, String address,
                                                       Integer pageNumber, Integer pageSize);
 
-    Object findDeviceInInfo();
+    /**
+     * 查询可出库的设备信息
+     *
+     * @param supplierId 供应商id
+     * @return 可出库设备信息
+     */
+    List<DeviceInOutResult> findDeviceCanOutInfo(Long supplierId);
 
-    Object findDeviceOutInfo();
+    /**
+     * 查询可入库设备信息
+     *
+     * @param supplierId 供应商id
+     * @param crmNo      派单号
+     * @return 可入库设备信息
+     */
+    List<DeviceInOutResult> findDeviceCanInInfo(Long supplierId, String crmNo);
 
-    void deviceInOutSubmit();
+    /**
+     * 设备出入库提交
+     *
+     * @param deviceInOutSubmitParam 设备出入库提交参数
+     */
+    void deviceInOutSubmit(DeviceInOutSubmitParam deviceInOutSubmitParam);
 
 
     // -- 出入库登记查询 资源保障部分

+ 68 - 6
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDeviceInOutServiceImpl.java

@@ -1,18 +1,31 @@
 package com.qmth.sop.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.bean.params.DeviceInOutForm;
+import com.qmth.sop.business.bean.params.DeviceInOutSubmitParam;
 import com.qmth.sop.business.bean.result.DeviceInOutResult;
+import com.qmth.sop.business.entity.SysDevice;
+import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBDeviceInOut;
 import com.qmth.sop.business.mapper.TBDeviceInOutMapper;
+import com.qmth.sop.business.service.SysDeviceService;
 import com.qmth.sop.business.service.TBDeviceInOutService;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.DeviceStatusEnum;
 import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.InOutTypeEnum;
+import com.qmth.sop.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 /**
  * <p>
  * 设备出入库登记 服务实现类
@@ -23,6 +36,8 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class TBDeviceInOutServiceImpl extends ServiceImpl<TBDeviceInOutMapper, TBDeviceInOut> implements TBDeviceInOutService {
+    @Resource
+    private SysDeviceService sysDeviceService;
 
     @Override
     public IPage<DeviceInOutResult> findDeviceInOutPageBySop(Long serviceUnitId, DeviceUsageTypeEnum usageType, Long userId, DeviceStatusEnum deviceStatus, Long inOutTimeStart, Long inOutTimeEnd, String deviceNo, String customName, String location, String address, Integer pageNumber, Integer pageSize) {
@@ -36,18 +51,65 @@ public class TBDeviceInOutServiceImpl extends ServiceImpl<TBDeviceInOutMapper, T
     }
 
     @Override
-    public Object findDeviceInInfo() {
-        return null;
+    public List<DeviceInOutResult> findDeviceCanOutInfo(Long supplierId) {
+        return this.baseMapper.findDeviceCanOutInfo(supplierId, DeviceStatusEnum.NORMAL, InOutTypeEnum.IN);
     }
 
     @Override
-    public Object findDeviceOutInfo() {
-        return null;
+    public List<DeviceInOutResult> findDeviceCanInInfo(Long supplierId, String crmNo) {
+        return this.baseMapper.findDeviceCanInInfo(supplierId, InOutTypeEnum.OUT, crmNo);
     }
 
+
     @Override
-    public void deviceInOutSubmit() {
+    public void deviceInOutSubmit(DeviceInOutSubmitParam deviceInOutSubmitParam) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+
+        Long inOutTime = deviceInOutSubmitParam.getInOutTime();
+        InOutTypeEnum inOutType = deviceInOutSubmitParam.getInOutType();
+
+        Long serviceUnitId = deviceInOutSubmitParam.getServiceUnitId();
+        String crmNo = deviceInOutSubmitParam.getCrmNo();
+        String sopNo = deviceInOutSubmitParam.getSopNo();
+
+        DeviceUsageTypeEnum usageType;
+        if (sopNo != null && sopNo.length() > 0) {
+            usageType = DeviceUsageTypeEnum.PROJECT;
+        } else {
+            usageType = DeviceUsageTypeEnum.OTHER;
+        }
+        if (deviceInOutSubmitParam.getDeviceInOutFormList().size() > deviceInOutSubmitParam.getDeviceInOutFormList().stream().map(DeviceInOutForm::getDeviceNo).distinct().count()) {
+            throw ExceptionResultEnum.ERROR.exception("出入库登记表中设备编号有重复");
+        }
+
+        List<DeviceInOutForm> deviceInOutFormList = deviceInOutSubmitParam.getDeviceInOutFormList();
+        List<TBDeviceInOut> tbDeviceInOutList = deviceInOutFormList.stream().flatMap(e -> {
+            TBDeviceInOut tbDeviceInOut = new TBDeviceInOut();
+            tbDeviceInOut.setServiceId(serviceUnitId);
+            tbDeviceInOut.setCrmNo(crmNo);
+            tbDeviceInOut.setSopNo(sopNo);
+            tbDeviceInOut.setUserId(requestUser.getId());
+            tbDeviceInOut.setType(inOutType);
+            tbDeviceInOut.setDeviceNo(e.getDeviceNo());
+            tbDeviceInOut.setSupplierName(e.getSupplierName());
+            tbDeviceInOut.setLocation(e.getLocation());
+            tbDeviceInOut.setAddress(e.getAddress());
+            tbDeviceInOut.setStatus(e.getDeviceStatus());
+            tbDeviceInOut.setUsageType(usageType);
+            tbDeviceInOut.setBasePhotoPath(e.getBasePhotoPath());
+            tbDeviceInOut.setInOutTime(inOutTime);
+
+            UpdateWrapper<SysDevice> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda()
+                    .set(SysDevice::getLocation, e.getAddress())
+                    .set(SysDevice::getScanCount, e.getScanCount())
+                    .set(SysDevice::getStatus, e.getDeviceStatus())
+                    .eq(SysDevice::getSerialNo, e.getDeviceNo());
+            sysDeviceService.update(updateWrapper);
 
+            return Stream.of(tbDeviceInOut);
+        }).collect(Collectors.toList());
+        this.saveBatch(tbDeviceInOutList);
     }
 
     @Override
@@ -58,4 +120,4 @@ public class TBDeviceInOutServiceImpl extends ServiceImpl<TBDeviceInOutMapper, T
         return this.baseMapper.findDeviceInOutPageBySource(new Page<>(pageNumber, pageSize), serviceUnitId, inOutType,
                 deviceNo, inOutTimeStart, inOutTimeEnd, supplierId, customName);
     }
-}
+}

+ 67 - 0
sop-business/src/main/resources/mapper/TBDeviceInOutMapper.xml

@@ -115,4 +115,71 @@
         </where>
         ORDER BY tbs.id DESC,tbdio.in_out_time
     </select>
+    <select id="findDeviceCanOutInfo" resultType="com.qmth.sop.business.bean.result.DeviceInOutResult">
+        SELECT
+            sd.serial_no AS serialNo,
+            sd.brand AS deviceBrand,
+            ss.name AS supplierName,
+            sd.status AS deviceStatus,
+            sd.scan_count AS scanCount,
+            sd.location
+        FROM
+            sys_device sd
+                LEFT JOIN
+            sys_supplier ss ON sd.supplier_id = ss.id
+                LEFT JOIN
+            (SELECT
+                 device_no, type
+             FROM
+                 t_b_device_in_out
+             ORDER BY in_out_time DESC
+             LIMIT 1) lt ON sd.serial_no = lt.device_no
+        <where>
+            AND sd.enable
+            <if test="supplierId != null">
+                AND ss.id = #{supplierId}
+            </if>
+            <if test="status != null">
+                AND sd.status = #{status}
+            </if>
+            <if test="inOutType != null">
+                AND (lt.type is null OR lt.type = #{inOutType})
+            </if>
+        </where>
+        ORDER BY ss.id,sd.brand,sd.serial_no
+    </select>
+    <select id="findDeviceCanInInfo" resultType="com.qmth.sop.business.bean.result.DeviceInOutResult">
+        SELECT
+            sd.serial_no AS serialNo,
+            sd.brand AS deviceBrand,
+            ss.name AS supplierName,
+            sd.status AS deviceStatus,
+            sd.scan_count AS scanCount,
+            sd.location,
+            ss.name AS address
+        FROM
+            sys_device sd
+        LEFT JOIN
+            sys_supplier ss ON sd.supplier_id = ss.id
+        LEFT JOIN
+        (SELECT
+            device_no, type, crm_no
+        FROM
+            t_b_device_in_out
+        ORDER BY in_out_time DESC
+        LIMIT 1) lt ON sd.serial_no = lt.device_no
+        <where>
+            AND sd.enable
+            <if test="supplierId != null">
+                AND ss.id = #{supplierId}
+            </if>
+            <if test="inOutType != null">
+                AND lt.type = #{inOutType}
+            </if>
+            <if test="crmNo != null and crmNo != ''">
+                AND lt.crm_no = #{crmNo}
+            </if>
+        </where>
+        ORDER BY ss.id,sd.brand,sd.serial_no
+    </select>
 </mapper>