Browse Source

sop、作业票的开发

车车 1 year ago
parent
commit
23fcdd16dd

+ 118 - 0
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsJobTicketController.java

@@ -0,0 +1,118 @@
+package com.ktg.iscs.controller;
+
+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.IsJobTicket;
+import com.ktg.iscs.domain.dto.ticket.AddJobTicketDTO;
+import com.ktg.iscs.domain.vo.ticket.JobTicketDetailVO;
+import com.ktg.iscs.service.IIsJobTicketService;
+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.List;
+
+/**
+ * 作业票Controller
+ *
+ * @author cgj
+ * @date 2024-10-18
+ */
+@Api(tags = "作业票")
+@RestController
+@RequestMapping("/iscs/ticket")
+public class IsJobTicketController extends BaseController
+{
+    @Autowired
+    private IIsJobTicketService isJobTicketService;
+
+    /**
+     * 查询作业票分页
+     */
+    @ApiOperation("查询作业票-分页")
+    @Parameters({
+            @Parameter(name = "page", description = "Page"),
+            @Parameter(name = "dto", description = "实体参数")
+    })
+    @PreAuthorize("@ss.hasPermi('iscs:ticket:list')")
+    @GetMapping("/getIsJobTicketPage")
+    public CommonResult<Page<IsJobTicket>> getIsJobTicketPage(Page<IsJobTicket> page, IsJobTicket isJobTicket)
+    {
+        Page<IsJobTicket> result = isJobTicketService.page(page, Wrappers.<IsJobTicket>lambdaQuery()
+                .orderByDesc(IsJobTicket::getTicketId));
+        return CommonResult.success(result);
+    }
+
+    /**
+     * 导出作业票列表
+     */
+    @ApiOperation("导出作业票列表")
+    @Parameter(name = "isJobTicket", description = "实体参数")
+    @PreAuthorize("@ss.hasPermi('iscs:ticket:export')")
+    @Log(title = "作业票", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportIsJobTicket")
+    public void exportIsJobTicket(HttpServletResponse response, IsJobTicket isJobTicket)
+    {
+        List<IsJobTicket> list = isJobTicketService.selectIsJobTicketList(isJobTicket);
+        ExcelUtil<IsJobTicket> util = new ExcelUtil<IsJobTicket>(IsJobTicket.class);
+        util.exportExcel(response, list, "作业票数据");
+    }
+
+    /**
+     * 获取作业票详细信息
+     */
+    @ApiOperation("获取作业票详细信息")
+    @Parameter(name = "ticketId", description = "ticketId")
+    @PreAuthorize("@ss.hasPermi('iscs:ticket:query')")
+    @GetMapping(value = "/selectIsJobTicketById")
+    public CommonResult<JobTicketDetailVO> selectIsJobTicketById(Long ticketId)
+    {
+        return CommonResult.success(isJobTicketService.selectIsJobTicketByTicketId(ticketId));
+    }
+
+    /**
+     * 新增作业票
+     */
+    @ApiOperation("新增作业票")
+    @PreAuthorize("@ss.hasPermi('iscs:ticket:add')")
+    @Log(title = "作业票", businessType = BusinessType.INSERT)
+    @PostMapping("/insertIsJobTicket")
+    public CommonResult<Boolean> insertIsJobTicket(@RequestBody @Parameter(name = "dto", description = "新增数据类,放到body") AddJobTicketDTO dto)
+    {
+        return CommonResult.success(isJobTicketService.insertIsJobTicket(dto));
+    }
+
+    /**
+     * 修改作业票
+     */
+    @ApiOperation("修改作业票")
+    @PreAuthorize("@ss.hasPermi('iscs:ticket:edit')")
+    @Log(title = "作业票", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateIsJobTicket")
+    public CommonResult<Boolean> updateIsJobTicket(@RequestBody @Parameter(name = "dto", description = "修改数据类,放到body") AddJobTicketDTO dto)
+    {
+        return CommonResult.success(isJobTicketService.updateIsJobTicket(dto));
+    }
+
+    /**
+     * 删除作业票
+     */
+    @ApiOperation("删除作业票")
+    @PreAuthorize("@ss.hasPermi('iscs:ticket:remove')")
+    @Log(title = "作业票", businessType = BusinessType.DELETE)
+	@PostMapping("/deleteIsJobTicketByTicketIds")
+    public CommonResult<Boolean> deleteIsJobTicketByTicketIds(String ticketIds)
+    {
+        return CommonResult.success(isJobTicketService.deleteIsJobTicketByTicketIds(ticketIds) != 0);
+    }
+}

+ 2 - 1
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsSopController.java

@@ -10,6 +10,7 @@ import com.ktg.common.utils.poi.ExcelUtil;
 import com.ktg.iscs.domain.IsSop;
 import com.ktg.iscs.domain.dto.sop.AddSopDTO;
 import com.ktg.iscs.domain.dto.sop.PageSopDTO;
+import com.ktg.iscs.domain.vo.sop.SopDetailVO;
 import com.ktg.iscs.service.IIsSopService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -81,7 +82,7 @@ public class IsSopController extends BaseController {
     @Parameter(name = "sopId", description = "sopId")
     @PreAuthorize("@ss.hasPermi('iscs:sop:query')")
     @GetMapping(value = "/selectIsSopById")
-    public CommonResult<IsSop> selectIsSopById(Long sopId) {
+    public CommonResult<SopDetailVO> selectIsSopById(Long sopId) {
         return CommonResult.success(isSopService.selectIsSopBySopId(sopId));
     }
 

+ 61 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/dto/ticket/AddJobTicketDTO.java

@@ -0,0 +1,61 @@
+package com.ktg.iscs.domain.dto.ticket;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 作业票对象 is_job_ticket
+ *
+ * @author cgj
+ * @date 2024-10-18
+ */
+@Data
+public class AddJobTicketDTO
+{
+
+    @Schema(description = "作业票ID")
+    private Long ticketId;
+
+    @Schema(description = "作业票编号")
+    private String ticketCode;
+
+    @Schema(description = "作业票名称")
+    private String ticketName;
+
+    @Schema(description = "所属车间ID")
+    private Long workshopId;
+
+    @Schema(description = "所属区域ID")
+    private Long workareaId;
+
+    @Schema(description = "所属SOPID")
+    private Long sopId;
+
+    @Schema(description = "作业票类型")
+    private String ticketType;
+
+    @Schema(description = "作业票详情")
+    private String ticketContent;
+
+    @Schema(description = "作业票状态")
+    private String ticketStatus;
+
+    @Schema(description = "作业票开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date ticketStartTime;
+
+    @Schema(description = "作业票结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date ticketEndTime;
+
+    @Schema(description = "隔离点id, 多个用逗号分隔")
+    private String pointIds;
+
+    @Schema(description = "关联人员信息")
+    private List<AddTicketUserDTO> ticketUserDTOList;
+
+}

+ 28 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/dto/ticket/AddTicketUserDTO.java

@@ -0,0 +1,28 @@
+package com.ktg.iscs.domain.dto.ticket;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 作业票用户对象 is_job_ticket_user
+ *
+ * @author cgj
+ * @date 2024-10-18
+ */
+@Data
+public class AddTicketUserDTO
+{
+
+    @Schema(description = "用户ID")
+    private Long userId;
+
+    @Schema(description = "用户名称")
+    private String userName;
+
+    @Schema(description = "用户类型")
+    private String userType;
+
+    @Schema(description = "作业票角色")
+    private String userRole;
+
+}

+ 54 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/points/PointDetailVO.java

@@ -0,0 +1,54 @@
+package com.ktg.iscs.domain.vo.points;
+
+import com.ktg.common.core.domain.model.BaseBean;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 隔离点对象 is_isolation_point
+ *
+ * @author cgj
+ * @date 2024-10-18
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PointDetailVO extends BaseBean
+{
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "隔离点ID")
+    private Long pointId;
+
+    @Schema(description = "隔离点编号")
+    private String pointCode;
+
+    @Schema(description = "隔离点名称")
+    private String pointName;
+
+    @Schema(description = "隔离点类型")
+    private String pointType;
+
+    @Schema(description = "所属车间ID")
+    private Long workshopId;
+
+    @Schema(description = "所属区域ID")
+    private Long workareaId;
+
+    @Schema(description = "危险能量类型")
+    private String powerType;
+
+    @Schema(description = "隔离方式")
+    private String isolationMethod;
+
+    @Schema(description = "隔离点图标")
+    private String pointIcon;
+
+    @Schema(description = "隔离点图片")
+    private String pointPicture;
+
+    @Schema(description = "删除标志(0代表存在 2代表删除)")
+    private String delFlag;
+
+
+}

+ 53 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/sop/SopDetailVO.java

@@ -0,0 +1,53 @@
+package com.ktg.iscs.domain.vo.sop;
+
+import com.ktg.common.core.domain.model.BaseBean;
+import com.ktg.iscs.domain.vo.points.PointDetailVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * SOP信息对象 is_sop
+ *
+ * @author cgj
+ * @date 2024-10-18
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class SopDetailVO extends BaseBean
+{
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "SOP ID")
+    private Long sopId;
+
+    @Schema(description = "SOP编号")
+    private String sopCode;
+
+    @Schema(description = "SOP名称")
+    private String sopName;
+
+    @Schema(description = "SOP类型")
+    private String sopType;
+
+    @Schema(description = "所属车间ID")
+    private Long workshopId;
+
+    @Schema(description = "所属区域ID")
+    private Long workareaId;
+
+    @Schema(description = "SOP内容")
+    private String sopContent;
+
+    @Schema(description = "SOP状态")
+    private String sopStatus;
+
+    @Schema(description = "删除标志(0代表存在 2代表删除)")
+    private String delFlag;
+
+   @Schema(description = "隔离点数据")
+   private List<PointDetailVO>  pointDetailVOList;
+
+}

+ 70 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/ticket/JobTicketDetailVO.java

@@ -0,0 +1,70 @@
+package com.ktg.iscs.domain.vo.ticket;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ktg.common.core.domain.model.BaseBean;
+import com.ktg.iscs.domain.IsJobTicketUser;
+import com.ktg.iscs.domain.vo.points.PointDetailVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 作业票对象 is_job_ticket
+ *
+ * @author cgj
+ * @date 2024-10-18
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class JobTicketDetailVO extends BaseBean
+{
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "作业票ID")
+    private Long ticketId;
+
+    @Schema(description = "作业票编号")
+    private String ticketCode;
+
+    @Schema(description = "作业票名称")
+    private String ticketName;
+
+    @Schema(description = "所属车间ID")
+    private Long workshopId;
+
+    @Schema(description = "所属区域ID")
+    private Long workareaId;
+
+    @Schema(description = "所属SOPID")
+    private Long sopId;
+
+    @Schema(description = "作业票类型")
+    private String ticketType;
+
+    @Schema(description = "作业票详情")
+    private String ticketContent;
+
+    @Schema(description = "作业票状态")
+    private String ticketStatus;
+
+    @Schema(description = "作业票开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date ticketStartTime;
+
+    @Schema(description = "作业票结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date ticketEndTime;
+
+    @Schema(description = "删除标志(0代表存在 2代表删除)")
+    private String delFlag;
+
+    @Schema(description = "隔离点数据")
+    private List<PointDetailVO> pointDetailVOList;
+
+    @Schema(description = "人员数据")
+    private List<IsJobTicketUser> jobTicketUserList;
+
+}

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

@@ -2,6 +2,7 @@ package com.ktg.iscs.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ktg.iscs.domain.IsIsolationPoint;
+import com.ktg.iscs.domain.vo.points.PointDetailVO;
 
 import java.util.List;
 
@@ -60,4 +61,6 @@ public interface IIsIsolationPointService extends IService<IsIsolationPoint>
      * @return 结果
      */
     int deleteIsIsolationPointByPointId(Long pointId);
+
+    List<PointDetailVO> getPointDetailList(Long[] ids);
 }

+ 7 - 5
ktg-iscs/src/main/java/com/ktg/iscs/service/IIsJobTicketService.java

@@ -2,6 +2,8 @@ package com.ktg.iscs.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ktg.iscs.domain.IsJobTicket;
+import com.ktg.iscs.domain.dto.ticket.AddJobTicketDTO;
+import com.ktg.iscs.domain.vo.ticket.JobTicketDetailVO;
 
 import java.util.List;
 
@@ -19,7 +21,7 @@ public interface IIsJobTicketService extends IService<IsJobTicket>
      * @param ticketId 作业票主键
      * @return 作业票
      */
-    IsJobTicket selectIsJobTicketByTicketId(Long ticketId);
+    JobTicketDetailVO selectIsJobTicketByTicketId(Long ticketId);
 
     /**
      * 查询作业票列表
@@ -32,18 +34,18 @@ public interface IIsJobTicketService extends IService<IsJobTicket>
     /**
      * 新增作业票
      *
-     * @param isJobTicket 作业票
+     * @param dto 作业票
      * @return 结果
      */
-    int insertIsJobTicket(IsJobTicket isJobTicket);
+    Boolean insertIsJobTicket(AddJobTicketDTO dto);
 
     /**
      * 修改作业票
      *
-     * @param isJobTicket 作业票
+     * @param dto 作业票
      * @return 结果
      */
-    int updateIsJobTicket(IsJobTicket isJobTicket);
+    Boolean updateIsJobTicket(AddJobTicketDTO dto);
 
     /**
      * 批量删除作业票

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

@@ -3,6 +3,7 @@ package com.ktg.iscs.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ktg.iscs.domain.IsSop;
 import com.ktg.iscs.domain.dto.sop.AddSopDTO;
+import com.ktg.iscs.domain.vo.sop.SopDetailVO;
 
 import java.util.List;
 
@@ -20,7 +21,7 @@ public interface IIsSopService extends IService<IsSop>
      * @param sopId SOP信息主键
      * @return SOP信息
      */
-    IsSop selectIsSopBySopId(Long sopId);
+    SopDetailVO selectIsSopBySopId(Long sopId);
 
     /**
      * 查询SOP信息列表

+ 10 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsIsolationPointServiceImpl.java

@@ -5,13 +5,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ktg.common.core.text.Convert;
 import com.ktg.common.utils.DateUtils;
+import com.ktg.common.utils.bean.BeanUtils;
 import com.ktg.iscs.domain.IsIsolationPoint;
+import com.ktg.iscs.domain.vo.points.PointDetailVO;
 import com.ktg.iscs.mapper.IsIsolationPointMapper;
 import com.ktg.iscs.service.IIsIsolationPointService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -118,4 +121,11 @@ public class IsIsolationPointServiceImpl extends ServiceImpl<IsIsolationPointMap
     {
         return isIsolationPointMapper.deleteIsIsolationPointByPointId(pointId);
     }
+
+    @Override
+    public List<PointDetailVO> getPointDetailList(Long[] ids) {
+        Assert.isTrue(ids.length == 0, "查询隔离点信息出错!");
+        List<IsIsolationPoint> isIsolationPoints = listByIds(Arrays.asList(ids));
+        return BeanUtils.toBean(isIsolationPoints, PointDetailVO.class);
+    }
 }

+ 134 - 10
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsJobTicketServiceImpl.java

@@ -1,16 +1,31 @@
 package com.ktg.iscs.service.impl;
 
 import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ktg.common.core.text.Convert;
 import com.ktg.common.utils.DateUtils;
+import com.ktg.common.utils.bean.BeanUtils;
+import com.ktg.iscs.domain.IsIsolationPoint;
 import com.ktg.iscs.domain.IsJobTicket;
+import com.ktg.iscs.domain.IsJobTicketPoints;
+import com.ktg.iscs.domain.IsJobTicketUser;
+import com.ktg.iscs.domain.dto.ticket.AddJobTicketDTO;
+import com.ktg.iscs.domain.dto.ticket.AddTicketUserDTO;
+import com.ktg.iscs.domain.vo.points.PointDetailVO;
+import com.ktg.iscs.domain.vo.ticket.JobTicketDetailVO;
 import com.ktg.iscs.mapper.IsJobTicketMapper;
+import com.ktg.iscs.service.IIsIsolationPointService;
+import com.ktg.iscs.service.IIsJobTicketPointsService;
 import com.ktg.iscs.service.IIsJobTicketService;
+import com.ktg.iscs.service.IIsJobTicketUserService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 作业票Service业务层处理
@@ -23,6 +38,13 @@ public class IsJobTicketServiceImpl extends ServiceImpl<IsJobTicketMapper, IsJob
 {
     @Autowired
     private IsJobTicketMapper isJobTicketMapper;
+    @Autowired
+    private IIsJobTicketPointsService iIsJobTicketPointsService;
+    @Autowired
+    private IIsJobTicketUserService iIsJobTicketUserService;
+    @Autowired
+    private IIsIsolationPointService iIsIsolationPointService;
+
 
     /**
      * 查询作业票
@@ -31,9 +53,27 @@ public class IsJobTicketServiceImpl extends ServiceImpl<IsJobTicketMapper, IsJob
      * @return 作业票
      */
     @Override
-    public IsJobTicket selectIsJobTicketByTicketId(Long ticketId)
+    public JobTicketDetailVO selectIsJobTicketByTicketId(Long ticketId)
     {
-        return isJobTicketMapper.selectIsJobTicketByTicketId(ticketId);
+        // 1.查询基础数据
+        IsJobTicket jobTicket = isJobTicketMapper.selectIsJobTicketByTicketId(ticketId);
+        JobTicketDetailVO jobTicketDetailVO = BeanUtils.toBean(jobTicket, JobTicketDetailVO.class);
+        // 2.查询作业票和隔离点的关联关系
+        List<IsJobTicketPoints> isJobTicketPoints = iIsJobTicketPointsService.list(Wrappers.<IsJobTicketPoints>lambdaQuery()
+                .eq(IsJobTicketPoints::getTicketId, ticketId));
+        // 2.1查询隔离点的详细信息
+        if (!isJobTicketPoints.isEmpty()) {
+            List<Long> pointIds = isJobTicketPoints.stream().map(IsJobTicketPoints::getPointId).collect(Collectors.toList());
+            List<IsIsolationPoint> isIsolationPoints = iIsIsolationPointService.listByIds(pointIds);
+            // 2.2组装隔离点数据
+            jobTicketDetailVO.setPointDetailVOList(BeanUtils.toBean(isIsolationPoints, PointDetailVO.class));
+        }
+        // 3.查询人员信息
+        List<IsJobTicketUser> jobTicketUserList = iIsJobTicketUserService.list(Wrappers.<IsJobTicketUser>lambdaQuery()
+                .eq(IsJobTicketUser::getTicketId, ticketId));
+        // 3.1组装人员数据
+        jobTicketDetailVO.setJobTicketUserList(jobTicketUserList);
+        return jobTicketDetailVO;
     }
 
     /**
@@ -51,27 +91,111 @@ public class IsJobTicketServiceImpl extends ServiceImpl<IsJobTicketMapper, IsJob
     /**
      * 新增作业票
      *
-     * @param isJobTicket 作业票
+     * @param dto 作业票
      * @return 结果
      */
+    @Transactional
     @Override
-    public int insertIsJobTicket(IsJobTicket isJobTicket)
+    public Boolean insertIsJobTicket(AddJobTicketDTO dto)
     {
-        isJobTicket.setCreateTime(DateUtils.getNowDate());
-        return isJobTicketMapper.insertIsJobTicket(isJobTicket);
+        // 1.断言判断必填
+        Assert.isTrue(StringUtils.isNotBlank(dto.getTicketCode()), "作业票编号不可为空!");
+        Assert.isTrue(StringUtils.isNotBlank(dto.getTicketName()), "作业票名称不可为空!");
+        Assert.notNull(dto.getWorkshopId(), "所属车间不可为空!");
+        Assert.isTrue(StringUtils.isNotBlank(dto.getPointIds()), "请选择隔离点!");
+        Assert.isFalse(dto.getTicketUserDTOList().isEmpty(), "人员信息不可为空!");
+        // 1.1检查作业票编码是否唯一
+        List<IsJobTicket> list = list(Wrappers.<IsJobTicket>lambdaQuery().eq(IsJobTicket::getTicketCode, dto.getTicketCode()));
+        Assert.isTrue(list.isEmpty(), "该编码已被使用!");
+        // 1.2人员信息是否存在重复
+        boolean b = dto.getTicketUserDTOList().size() == dto.getTicketUserDTOList().stream().distinct().count();
+        Assert.isTrue(b, "用户数据存在同名情况,请修改!");
+        // 2.新增作业票
+        IsJobTicket jobTicket = BeanUtils.toBean(dto, IsJobTicket.class);
+        isJobTicketMapper.insertIsJobTicket(jobTicket);
+        // 3.新增作业票和隔离点的关联关系
+        // TODO 批量新增
+        Long[] pointIds = Convert.toLongArray(dto.getPointIds());
+        for (Long pointId : pointIds) {
+            IsJobTicketPoints isJobTicketPoints = new IsJobTicketPoints();
+            isJobTicketPoints.setTicketId(jobTicket.getSopId());
+            isJobTicketPoints.setWorkshopId(dto.getWorkshopId());
+            isJobTicketPoints.setWorkareaId(dto.getWorkareaId());
+            isJobTicketPoints.setPointId(pointId);
+            iIsJobTicketPointsService.save(isJobTicketPoints);
+        }
+        // 4.新增人员信息
+        for (AddTicketUserDTO addTicketUserDTO : dto.getTicketUserDTOList()) {
+            IsJobTicketUser jobTicketUser = BeanUtils.toBean(addTicketUserDTO, IsJobTicketUser.class);
+            jobTicketUser.setTicketId(jobTicket.getTicketId());
+            if (null == addTicketUserDTO.getUserId() || addTicketUserDTO.getUserId() == 0) {
+                addTicketUserDTO.setUserId(0L);
+            }
+            iIsJobTicketUserService.save(jobTicketUser);
+        }
+        return true;
     }
 
     /**
      * 修改作业票
      *
-     * @param isJobTicket 作业票
+     * @param dto 作业票
      * @return 结果
      */
+    @Transactional
     @Override
-    public int updateIsJobTicket(IsJobTicket isJobTicket)
+    public Boolean updateIsJobTicket(AddJobTicketDTO dto)
     {
-        isJobTicket.setUpdateTime(DateUtils.getNowDate());
-        return isJobTicketMapper.updateIsJobTicket(isJobTicket);
+        // 1.断言判断必填
+        Assert.notNull(dto.getTicketId(), "id不可为空!");
+        Assert.isTrue(StringUtils.isNotBlank(dto.getTicketCode()), "作业票编号不可为空!");
+        Assert.isTrue(StringUtils.isNotBlank(dto.getTicketName()), "作业票名称不可为空!");
+        Assert.notNull(dto.getWorkshopId(), "所属车间不可为空!");
+        Assert.isTrue(StringUtils.isNotBlank(dto.getPointIds()), "请选择隔离点!");
+        Assert.isFalse(dto.getTicketUserDTOList().isEmpty(), "人员信息不可为空!");
+        // 1.2人员信息是否存在重复
+        boolean b = dto.getTicketUserDTOList().size() == dto.getTicketUserDTOList().stream().distinct().count();
+        Assert.isTrue(b, "用户数据存在同名情况,请修改!");
+        // 1.1检查作业票编码是否唯一
+        List<IsJobTicket> list = list(Wrappers.<IsJobTicket>lambdaQuery()
+                .eq(IsJobTicket::getTicketCode, dto.getTicketCode())
+                .ne(IsJobTicket::getTicketId, dto.getTicketId()));
+        Assert.isTrue(list.isEmpty(), "该编码已被使用!");
+        // 2.修改作业票
+        IsJobTicket jobTicket = BeanUtils.toBean(dto, IsJobTicket.class);
+        jobTicket.setUpdateTime(DateUtils.getNowDate());
+        isJobTicketMapper.updateById(jobTicket);
+        // 3.1检查隔离点有没有变更
+        Long[] pointIds = Convert.toLongArray(dto.getPointIds());
+        List<IsJobTicketPoints> isSopPoints = iIsJobTicketPointsService.list(Wrappers.<IsJobTicketPoints>lambdaQuery()
+                .eq(IsJobTicketPoints::getTicketId, dto.getTicketId())
+                .in(IsJobTicketPoints::getPointId, pointIds));
+        // 3.1如果查出来变更了,开始执行删除,重新增加一轮
+        if (pointIds.length != isSopPoints.size()) {
+            iIsJobTicketPointsService.remove(Wrappers.<IsJobTicketPoints>lambdaQuery()
+                    .eq(IsJobTicketPoints::getTicketId, dto.getTicketId()));
+            // TODO 批量新增
+            for (Long pointId : pointIds) {
+                IsJobTicketPoints isJobTicketPoints = new IsJobTicketPoints();
+                isJobTicketPoints.setTicketId(jobTicket.getSopId());
+                isJobTicketPoints.setWorkshopId(dto.getWorkshopId());
+                isJobTicketPoints.setWorkareaId(dto.getWorkareaId());
+                isJobTicketPoints.setPointId(pointId);
+                iIsJobTicketPointsService.save(isJobTicketPoints);
+            }
+        }
+        // 4.修改人员信息,先删后增
+        iIsJobTicketUserService.remove(Wrappers.<IsJobTicketUser>lambdaQuery()
+                .eq(IsJobTicketUser::getTicketId, dto.getTicketId()));
+        for (AddTicketUserDTO addTicketUserDTO : dto.getTicketUserDTOList()) {
+            IsJobTicketUser jobTicketUser = BeanUtils.toBean(addTicketUserDTO, IsJobTicketUser.class);
+            jobTicketUser.setTicketId(dto.getTicketId());
+            if (null == addTicketUserDTO.getUserId() || addTicketUserDTO.getUserId() == 0) {
+                addTicketUserDTO.setUserId(0L);
+            }
+            iIsJobTicketUserService.save(jobTicketUser);
+        }
+        return true;
     }
 
     /**

+ 23 - 2
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsSopServiceImpl.java

@@ -5,10 +5,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ktg.common.core.text.Convert;
 import com.ktg.common.utils.bean.BeanUtils;
+import com.ktg.iscs.domain.IsIsolationPoint;
 import com.ktg.iscs.domain.IsSop;
 import com.ktg.iscs.domain.IsSopPoints;
 import com.ktg.iscs.domain.dto.sop.AddSopDTO;
+import com.ktg.iscs.domain.vo.points.PointDetailVO;
+import com.ktg.iscs.domain.vo.sop.SopDetailVO;
 import com.ktg.iscs.mapper.IsSopMapper;
+import com.ktg.iscs.service.IIsIsolationPointService;
 import com.ktg.iscs.service.IIsSopPointsService;
 import com.ktg.iscs.service.IIsSopService;
 import org.apache.commons.lang3.StringUtils;
@@ -17,6 +21,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * SOP信息Service业务层处理
@@ -30,6 +35,8 @@ public class IsSopServiceImpl extends ServiceImpl<IsSopMapper, IsSop> implements
     private IsSopMapper isSopMapper;
     @Autowired
     private IIsSopPointsService iIsSopPointsService;
+    @Autowired
+    private IIsIsolationPointService iIsIsolationPointService;
 
     /**
      * 查询SOP信息
@@ -38,8 +45,22 @@ public class IsSopServiceImpl extends ServiceImpl<IsSopMapper, IsSop> implements
      * @return SOP信息
      */
     @Override
-    public IsSop selectIsSopBySopId(Long sopId) {
-        return isSopMapper.selectIsSopBySopId(sopId);
+    public SopDetailVO selectIsSopBySopId(Long sopId) {
+        // 1.查询基础数据
+        IsSop isSop = isSopMapper.selectIsSopBySopId(sopId);
+        SopDetailVO sopDetailVO = BeanUtils.toBean(isSop, SopDetailVO.class);
+        // 2.查询sop隔离点关联数据
+        List<IsSopPoints> isSopPoints = iIsSopPointsService.list(Wrappers.<IsSopPoints>lambdaQuery()
+                .eq(IsSopPoints::getSopId, sopId));
+        // 3.查询隔离点数据
+        if (!isSopPoints.isEmpty()) {
+            List<Long> pointIds = isSopPoints.stream().map(IsSopPoints::getPointId).collect(Collectors.toList());
+            List<IsIsolationPoint> isIsolationPoints = iIsIsolationPointService.listByIds(pointIds);
+            List<PointDetailVO> pointDetailVOList = BeanUtils.toBean(isIsolationPoints, PointDetailVO.class);
+            // 3.1组合返回数据
+            sopDetailVO.setPointDetailVOList(pointDetailVOList);
+        }
+        return sopDetailVO;
     }
 
     /**