zhuo
2025-02-20 3fb8061a9fb85629885ae8383db247946ede7eaf
添加抽样和不合格流程
已修改3个文件
已添加24个文件
1950 ■■■■■ 文件已修改
inspect-server/src/main/java/com/ruoyi/inspect/controller/FinishProductSpotCheckController.java 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/PushOADto.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SpotCheckQuarterDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SpotCheckYearDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/CommonOaMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedHandlerFileMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/SpotCheckQuarterMapper.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/SpotCheckYearItemMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/SpotCheckYearMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/CommonOaService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/FinishProductSpotCheckService.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedHandlerFileService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedHandlerService.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/SpotCheckQuarterItemService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/SpotCheckYearItemService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/CommonOaServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/FinishProductSpotCheckServiceImpl.java 679 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerFileServiceImpl.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java 280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/SpotCheckQuarterItemServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/SpotCheckYearItemServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/SpotCheckQuarterMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/SpotCheckYearMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProperty.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/FinishProductSpotCheckController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,198 @@
package com.ruoyi.inspect.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.inspect.dto.IfsStockQueryDTO;
import com.ruoyi.inspect.dto.SpotCheckQuarterDto;
import com.ruoyi.inspect.dto.SpotCheckYearDto;
import com.ruoyi.inspect.service.FinishProductSpotCheckService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * @Author zhuo
 * @Date 2024/9/29
 */
@RequestMapping("/finishProductSpotCheck")
@RestController
@AllArgsConstructor
@Api(tags = "成品抽样")
public class FinishProductSpotCheckController {
    private FinishProductSpotCheckService finishProductSpotCheckService;
    /**
     * æŸ¥è¯¢ifs库存数量
     *
     * @param ifsStockQueryDTO
     * @return
     */
    @ApiOperation(value = "查询ifs成品库存")
    @PostMapping("/getIfsStock")
    public Result getIfsStock(@RequestBody IfsStockQueryDTO ifsStockQueryDTO) {
        return finishProductSpotCheckService.getIfsStockReport(ifsStockQueryDTO);
    }
    /********************************************************  å­£åº¦æŠ½æ ·  ********************************************************/
    /**
     * æ–°å¢žå­£åº¦æŠ½æ£€
     *
     * @param spotCheckQuarterDto
     * @return
     */
    @ApiOperation(value = "新增季度抽检")
    @PostMapping("/addQuarter")
    public Result addQuarter(@RequestBody SpotCheckQuarterDto spotCheckQuarterDto) {
        return Result.success(finishProductSpotCheckService.addQuarter(spotCheckQuarterDto));
    }
    /**
     * æŸ¥è¯¢å­£åº¦æŠ½æ ·è¯¦æƒ…
     *
     * @param quarterId
     * @return
     */
    @ApiOperation(value = "查询季度抽样详情")
    @GetMapping("/getQuarter")
    public Result getQuarter(Integer quarterId) {
        return Result.success(finishProductSpotCheckService.getQuarter(quarterId));
    }
    /**
     * å­£åº¦æŠ½æ ·åˆ—表
     * @return
     * @throws Exception
     */
    @ApiOperation(value = "季度抽样列表")
    @GetMapping("/getQuarterPage")
    public Result getQuarterPage(Page page, SpotCheckQuarterDto spotCheckQuarter) throws Exception {
        return Result.success(finishProductSpotCheckService.getQuarterPage(page, spotCheckQuarter));
    }
    /**
     * æ–°å¢žå­£åº¦æŠ½æ£€
     *
     * @param quarterId
     * @return
     */
    @ApiOperation(value = "删除季度检验")
    @DeleteMapping("/deleteQuarter")
    public Result deleteQuarter(Integer quarterId) {
        return Result.success(finishProductSpotCheckService.deleteQuarter(quarterId));
    }
    /**
     * æˆå“ä¸‹å•界面查询季度信息
     *
     * @return
     */
    @ApiOperation(value = "成品下单界面查询季度信息")
    @GetMapping("/getQuarterOnOrder")
    public Result getQuarterOnOrder() {
        return Result.success(finishProductSpotCheckService.getQuarterOnOrder());
    }
    /**
     * æˆå“ä¸‹å•界面查询季度信息
     *
     * @return
     */
    @ApiOperation(value = "修改季度检验")
    @PostMapping("/updateQuarterOnOrder")
    public Result updateQuarterOnOrder(@RequestBody SpotCheckQuarterDto spotCheckQuarterDto) {
        return Result.success(finishProductSpotCheckService.updateQuarterOnOrder(spotCheckQuarterDto));
    }
    /**
     * æˆå“ä¸‹å•界面查询季度信息
     *
     * @return
     */
    @ApiOperation(value = "提交最终季度报告")
    @GetMapping("/finalReportQuarter")
    public void finalReportQuarter(Integer quarterId, HttpServletResponse response) {
        finishProductSpotCheckService.finalReportQuarter(quarterId, response);
    }
    /********************************************************  å¹´åº¦æŠ½æ ·  ********************************************************/
    /**
     * æ–°å¢žå¹´åº¦æŠ½æ ·
     *
     * @param spotCheckYearDto
     * @return
     */
    @ApiOperation(value = "新增年度抽样")
    @PostMapping("/addSpotCheckYear")
    public Result addSpotCheckYear(@RequestBody SpotCheckYearDto spotCheckYearDto) {
        return Result.success(finishProductSpotCheckService.addSpotCheckYear(spotCheckYearDto));
    }
    /**
     * æŸ¥è¯¢å­£åº¦æŠ½æ ·è¯¦æƒ…
     *
     * @param yearId
     * @return
     */
    @ApiOperation(value = "查询年度抽样详情")
    @GetMapping("/getSpotCheckYear")
    public Result getSpotCheckYear(Integer yearId) {
        return Result.success(finishProductSpotCheckService.getSpotCheckYear(yearId));
    }
    /**
     * å­£åº¦æŠ½æ ·åˆ—表
     * @return
     * @throws Exception
     */
    @ApiOperation(value = "年度抽样列表列表")
    @GetMapping("/getSpotCheckYearPage")
    public Result getSpotCheckYearPage(Page page, SpotCheckYearDto spotCheckYear) throws Exception {
        return Result.success(finishProductSpotCheckService.getSpotCheckYearPage(page, spotCheckYear));
    }
    /**
     * åˆ é™¤å¹´åº¦æŠ½æ ·
     *
     * @param yearId
     * @return
     */
    @ApiOperation(value = "删除年度抽样")
    @DeleteMapping("/deleteSpotCheckYear")
    public Result deleteSpotCheckYear(Integer yearId) {
        return Result.success(finishProductSpotCheckService.deleteSpotCheckYear(yearId));
    }
    /**
     * æˆå“ä¸‹å•界面查询季度信息
     *
     * @return
     */
    @ApiOperation(value = "修改年度检验")
    @PostMapping("/updateSpotCheckYear")
    public Result updateSpotCheckYear(@RequestBody SpotCheckYearDto spotCheckYearDto) {
        return Result.success(finishProductSpotCheckService.updateSpotCheckYear(spotCheckYearDto));
    }
    /**
     * æˆå“ä¸‹å•界面查询季度信息
     *
     * @return
     */
    @ApiOperation(value = "生成最终年度报告")
    @GetMapping("/finalReportSpotCheckYear")
    public Result finalReportSpotCheckYear(Integer yearId, HttpServletResponse response) {
        return Result.success(finishProductSpotCheckService.finalReportSpotCheckYear(yearId, response));
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java
@@ -1,4 +1,4 @@
package com.ruoyi.basic.controller;
package com.ruoyi.inspect.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,139 @@
package com.ruoyi.inspect.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.oa.OAProcess;
import com.ruoyi.inspect.dto.PushOADto;
import com.ruoyi.inspect.dto.UnqualifiedHandlerDto;
import com.ruoyi.inspect.pojo.InsUnqualifiedHandlerFile;
import com.ruoyi.inspect.service.InsUnqualifiedHandlerFileService;
import com.ruoyi.inspect.service.InsUnqualifiedHandlerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
@RestController
@Api("不合格处理管理")
@RequestMapping("/unqualifiedHandler")
@AllArgsConstructor
@Slf4j
public class InsUnqualifiedHandlerController {
    private final InsUnqualifiedHandlerService unqualifiedHandlerService;
    private final InsUnqualifiedHandlerFileService unqualifiedHandlerFileService;
    private static final String REQUESTID = "requestId";
    private static final String CHECKRESULT = "CHECKRESULT";
    @ApiOperation(value = "提交OA")
    @PostMapping("/pushOA")
    public Result pushOA(@RequestBody PushOADto pushOADto){
        return unqualifiedHandlerService.pushOA(pushOADto);
    }
    @ApiOperation(value = "查询")
    @GetMapping("/page")
    public Result pageByUnqualified(Page page, UnqualifiedHandlerDto unqualifiedHandlerDto){
        return Result.success(unqualifiedHandlerService.pageList(page, unqualifiedHandlerDto));
    }
    @ApiOperation(value = "附件上传")
    @PostMapping("/uploadFileByUnqualified")
    public Result<?> uploadFileByUnqualified(Long handlerId, MultipartFile file) {
        return Result.success(unqualifiedHandlerFileService.uploadFile(handlerId, file));
    }
    @ApiOperation(value = "不合格处理OA回调")
    @RequestMapping(value = "/callback", produces = "text/plain")
    public String unqualifiedHandlerOACallback(String data){
        String msg = OAProcess.oaReturnMsg(0, "success");
        JSONObject json = JSONObject.parseObject(data);
        System.out.println("========>" + json);
        try {
            Long oaWorkId = json.getLong(REQUESTID);
            String checkResult = json.getString(CHECKRESULT);
            Object o = json.get("workflowRequestLogs");
            JSONArray objects = JSONArray.parseArray(JSONObject.toJSONString(o));
            unqualifiedHandlerService.unqualifiedHandlerOACallback(oaWorkId, checkResult,objects);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            msg = OAProcess.oaReturnMsg(1, "oa回调失败: " + e.getMessage());
        }
        System.out.println("oa回调返回结果========>" + msg);
        return msg;
    }
    /**
     * ä¸‹è½½oa附件
     * @param handlerFileId
     * @param response
     */
    @GetMapping("/downloadOAFile/{handlerFileId}")
    public void downloadOAFile(@PathVariable("handlerFileId") Long handlerFileId, HttpServletResponse response){
        unqualifiedHandlerFileService.downloadOAFile(handlerFileId,response);
    }
    @ApiOperation(value = "新增不合格处理")
    @PostMapping("/addUnqualifiedHandler")
    public Result addUnqualifiedHandler(@RequestBody UnqualifiedHandlerDto unqualifiedHandlerDto){
        return Result.success(unqualifiedHandlerService.addUnqualifiedHandler(unqualifiedHandlerDto));
    }
    @ApiOperation(value = "编辑不合格处理")
    @PostMapping("/updateUnqualifiedHandler")
    public Result updateUnqualifiedHandler(@RequestBody UnqualifiedHandlerDto unqualifiedHandlerDto){
        return Result.success(unqualifiedHandlerService.updateUnqualifiedHandler(unqualifiedHandlerDto));
    }
    @ApiOperation(value = "查看oa流程")
    @GetMapping("/getOaFlow")
    public Result getOaFlow(Integer id){
        return Result.success(unqualifiedHandlerService.getOaFlow(id));
    }
    @ApiOperation(value = "查看不合格处理界面")
    @GetMapping("/getUnqualifiedHandler")
    public Result getUnqualifiedHandler(Integer id){
        return Result.success(unqualifiedHandlerService.getUnqualifiedHandler(id));
    }
    @ApiOperation(value = "删除不合格处理")
    @DeleteMapping("/deleteUnqualifiedHandler")
    public Result deleteUnqualifiedHandler(Integer id) {
        return Result.success(unqualifiedHandlerService.deleteUnqualifiedHandler(id));
    }
    @ApiOperation(value = "下载附件")
    @GetMapping("/downFile")
    public Result<?> oaDownFile(Integer id) {
        InsUnqualifiedHandlerFile insUnqualifiedHandlerFile = unqualifiedHandlerFileService.getById(id);
        HashMap<String, Object> map = new HashMap<>();
        map.put("type", insUnqualifiedHandlerFile.getType());
        map.put("fileUrl", insUnqualifiedHandlerFile.getFileUrl());
        return Result.success(map);
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/PushOADto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * æäº¤oa数据传输对象
 */
@Data
public class PushOADto {
    /**
     * ä¸åˆæ ¼å¤„理主键id
     */
    @ApiModelProperty(value = "不合格处理主键id")
    private Long handlerId;
    /**
     * é™„ä»¶url
     */
    @ApiModelProperty(value = "附件url")
    private String fileUrl;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SpotCheckQuarterDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.SpotCheckQuarter;
import com.ruoyi.inspect.pojo.SpotCheckQuarterItem;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/10/10
 */
@Data
public class SpotCheckQuarterDto extends SpotCheckQuarter {
    @ApiModelProperty("季度抽检详情")
    private List<SpotCheckQuarterItem> quarterItems;
    @ApiModelProperty("创建人")
    private String createUserName;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SpotCheckYearDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.SpotCheckYear;
import com.ruoyi.inspect.pojo.SpotCheckYearItem;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/10/10
 */
@Data
public class SpotCheckYearDto extends SpotCheckYear {
    @ApiModelProperty("年度抽样详情")
    private List<SpotCheckYearItem> yearItems;
    @ApiModelProperty("创建人")
    private String createUserName;
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/CommonOaMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.CommonOa;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€common_oa(oa审核流程信息记录表)】的数据库操作Mapper
* @createDate 2024-08-01 15:54:11
* @Entity com.yuanchu.mom.pojo.CommonOa
*/
@Mapper
public interface CommonOaMapper extends BaseMapper<CommonOa> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedHandlerFileMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsUnqualifiedHandlerFile;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€ins_unqualified_handler_file(不合格处理附件记录表)】的数据库操作Mapper
* @createDate 2024-07-31 13:38:38
* @Entity com.yuanchu.mom.pojo.InsUnqualifiedHandlerFile
*/
@Mapper
public interface InsUnqualifiedHandlerFileMapper extends BaseMapper<InsUnqualifiedHandlerFile> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/SpotCheckQuarterMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.inspect.dto.SpotCheckQuarterDto;
import com.ruoyi.inspect.pojo.SpotCheckQuarter;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * å­£åº¦æŠ½æ ·è®¡åˆ’
 *
 * @author zhuo
 * @since 2024-10-09
 */
@Mapper
public interface SpotCheckQuarterMapper extends BaseMapper<SpotCheckQuarter> {
    /**
     * å­£åº¦æŠ½æ ·åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param ew
     * @return
     */
    IPage<SpotCheckQuarterDto> getQuarterPage(Page page, @Param("ew") QueryWrapper<SpotCheckQuarterDto> ew);
    /**
     * æˆå“ä¸‹å•界面查询季度信息
     * @return
     */
    List<Map<String, Object>> getQuarterOnOrder();
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/SpotCheckYearItemMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.SpotCheckYearItem;
import org.apache.ibatis.annotations.Mapper;
/**
 * å¹´åº¦æŠ½æ ·è®¡åˆ’详情表
 *
 * @author zhuo
 * @since 2024-10-10
 */
@Mapper
public interface SpotCheckYearItemMapper extends BaseMapper<SpotCheckYearItem> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/SpotCheckYearMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.inspect.dto.SpotCheckYearDto;
import com.ruoyi.inspect.pojo.SpotCheckYear;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * å¹´åº¦æŠ½æ ·è®¡åˆ’
 *
 * @author zhuo
 * @since 2024-10-10
 */
@Mapper
public interface SpotCheckYearMapper extends BaseMapper<SpotCheckYear> {
    /**
     * æŸ¥è¯¢å¹´åº¦æŠ½æ ·åˆ—表
     * @param page
     * @param ew
     * @return
     */
    IPage<SpotCheckYearDto> getSpotCheckYearPage(Page page, @Param("ew") QueryWrapper<SpotCheckYearDto> ew);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/CommonOaService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.pojo.CommonOa;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€common_oa(oa审核流程信息记录表)】的数据库操作Service
* @createDate 2024-08-01 15:54:11
*/
public interface CommonOaService extends IService<CommonOa> {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/FinishProductSpotCheckService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.inspect.dto.IfsStockQueryDTO;
import com.ruoyi.inspect.dto.SpotCheckQuarterDto;
import com.ruoyi.inspect.dto.SpotCheckYearDto;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * æˆå“æŠ½æ ·
 *
 * @Author zhuo
 * @Date 2024/9/29
 */
public interface FinishProductSpotCheckService {
    /**
     * æŸ¥è¯¢ifs成品库存
     *
     * @return
     */
    Result getIfsStockReport(IfsStockQueryDTO ifsStockQueryDTO);
    /*******************************************************  å­£åº¦æŠ½æ · *******************************************************/
    /**
     * æ–°å¢žå­£åº¦æŠ½æ£€
     * @param spotCheckQuarterDto
     * @return
     */
    boolean addQuarter(SpotCheckQuarterDto spotCheckQuarterDto);
    /**
     * æŸ¥è¯¢å­£åº¦æŠ½æ ·è¯¦æƒ…
     * @param quarterId
     * @return
     */
    SpotCheckQuarterDto getQuarter(Integer quarterId);
    /**
     * å­£åº¦æŠ½æ ·åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param spotCheckQuarter
     * @return
     */
    IPage<SpotCheckQuarterDto> getQuarterPage(Page page, SpotCheckQuarterDto spotCheckQuarter);
    /**
     * åˆ é™¤å­£åº¦æŠ½æ ·
     * @param quarterId
     * @return
     */
    boolean deleteQuarter(Integer quarterId);
    /**
     * æˆå“ä¸‹å•界面查询季度信息
     * @return
     */
    List<Map<String, Object>> getQuarterOnOrder();
    /**
     * ä¿®æ”¹å­£åº¦æ£€éªŒ
     * @param spotCheckQuarterDto
     * @return
     */
    boolean updateQuarterOnOrder(SpotCheckQuarterDto spotCheckQuarterDto);
    /**
     * ç”Ÿæˆæœ€ç»ˆæŠ¥å‘Š
     * @param quarterId
     * @return
     */
    boolean finalReportQuarter(Integer quarterId, HttpServletResponse response);
    /*******************************************************  å¹´åº¦æŠ½æ · *******************************************************/
    /**
     * æ–°å¢žå¹´åº¦æŠ½æ ·
     * @param spotCheckYearDto
     * @return
     */
    boolean addSpotCheckYear(SpotCheckYearDto spotCheckYearDto);
    /**
     * æŸ¥è¯¢å¹´åº¦æŠ½æ ·è¯¦æƒ…
     * @param yearId
     * @return
     */
    SpotCheckYearDto getSpotCheckYear(Integer yearId);
    /**
     * å¹´åº¦æŠ½æ ·åˆ—表
     * @param page
     * @param spotCheckYear
     * @return
     */
    IPage<SpotCheckYearDto> getSpotCheckYearPage(Page page, SpotCheckYearDto spotCheckYear);
    /**
     * åˆ é™¤å¹´åº¦æŠ½æ ·
     * @param yearId
     * @return
     */
    boolean deleteSpotCheckYear(Integer yearId);
    /**
     * ä¿®æ”¹å¹´åº¦æ£€éªŒ
     * @param spotCheckYearDto
     * @return
     */
    boolean updateSpotCheckYear(SpotCheckYearDto spotCheckYearDto);
    /**
     * ç”Ÿæˆæœ€ç»ˆå¹´åº¦æŠ¥å‘Š
     * @param yearId
     * @return
     */
    boolean finalReportSpotCheckYear(Integer yearId, HttpServletResponse response);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedHandlerFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.pojo.InsUnqualifiedHandlerFile;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€ins_unqualified_handler_file(不合格处理附件记录表)】的数据库操作Service
* @createDate 2024-07-31 13:38:38
*/
public interface InsUnqualifiedHandlerFileService extends IService<InsUnqualifiedHandlerFile> {
    InsUnqualifiedHandlerFile uploadFile(Long handlerId, MultipartFile file);
    void downloadOAFile(Long handlerFileId, HttpServletResponse response);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedHandlerService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.inspect.service;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.inspect.dto.PushOADto;
import com.ruoyi.inspect.dto.UnqualifiedHandlerDto;
import com.ruoyi.inspect.pojo.CommonOa;
import com.ruoyi.inspect.pojo.InsUnqualifiedHandler;
import com.ruoyi.inspect.vo.UnqualifiedHandlerVO;
import java.util.List;
import java.util.Map;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€ins_unqualified_handler(不合格处理表)】的数据库操作Service
* @createDate 2024-07-31 13:38:14
*/
public interface InsUnqualifiedHandlerService extends IService<InsUnqualifiedHandler> {
    IPage<UnqualifiedHandlerVO> pageList(Page page, UnqualifiedHandlerDto unqualifiedHandlerDto);
    Result pushOA(PushOADto pushOADto);
    void unqualifiedHandlerOACallback(Long oaWorkId, String checkResult, JSONArray objects);
    List<CommonOa> getOaFlow(Integer id);
    boolean addUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto);
    boolean updateUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto);
    UnqualifiedHandlerDto getUnqualifiedHandler(Integer id);
    boolean deleteUnqualifiedHandler(Integer id);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/SpotCheckQuarterItemService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.pojo.SpotCheckQuarterItem;
/**
 * å­£åº¦æŠ½æ ·è®¡åˆ’详情表
 *
 * @author zhuo
 * @since 2024-10-09
 */
public interface SpotCheckQuarterItemService extends IService<SpotCheckQuarterItem> {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/SpotCheckYearItemService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.pojo.SpotCheckYearItem;
/**
 * å¹´åº¦æŠ½æ ·è®¡åˆ’详情表
 *
 * @author zhuo
 * @since 2024-10-10
 */
public interface SpotCheckYearItemService extends IService<SpotCheckYearItem> {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/CommonOaServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.inspect.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.inspect.mapper.CommonOaMapper;
import com.ruoyi.inspect.pojo.CommonOa;
import com.ruoyi.inspect.service.CommonOaService;
import org.springframework.stereotype.Service;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€common_oa(oa审核流程信息记录表)】的数据库操作Service实现
* @createDate 2024-08-01 15:54:11
*/
@Service
public class CommonOaServiceImpl extends ServiceImpl<CommonOaMapper, CommonOa>
    implements CommonOaService {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/FinishProductSpotCheckServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,679 @@
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.DateImageUtil;
import com.ruoyi.common.utils.IfsApiUtils;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.IfsStockQueryDTO;
import com.ruoyi.inspect.dto.SpotCheckQuarterDto;
import com.ruoyi.inspect.dto.SpotCheckYearDto;
import com.ruoyi.inspect.mapper.SpotCheckQuarterMapper;
import com.ruoyi.inspect.mapper.SpotCheckYearMapper;
import com.ruoyi.inspect.pojo.SpotCheckQuarter;
import com.ruoyi.inspect.pojo.SpotCheckQuarterItem;
import com.ruoyi.inspect.pojo.SpotCheckYear;
import com.ruoyi.inspect.pojo.SpotCheckYearItem;
import com.ruoyi.inspect.service.FinishProductSpotCheckService;
import com.ruoyi.inspect.service.SpotCheckQuarterItemService;
import com.ruoyi.inspect.service.SpotCheckYearItemService;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * æˆå“æŠ½æ ·
 *
 * @Author zhuo
 * @Date 2024/9/29
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class FinishProductSpotCheckServiceImpl implements FinishProductSpotCheckService {
    @Resource
    private IfsApiUtils ifsApiUtils;
    @Resource
    private SpotCheckQuarterMapper spotCheckQuarterMapper;
    @Resource
    private SpotCheckQuarterItemService spotCheckQuarterItemService;
    @Resource
    private SpotCheckYearMapper spotCheckYearMapper;
    @Resource
    private SpotCheckYearItemService spotCheckYearItemService;
    @Value("${wordUrl}")
    private String wordUrl;
    @Value("${file.path}")
    private String imgUrl;
    @Resource
    private UserMapper userMapper;
    public Result getIfsStockReport(IfsStockQueryDTO ifsStockQueryDTO) {
        JSONObject jresult = new JSONObject();
        jresult.put("total", 0);
        jresult.put("count", 0);
        jresult.put("data", new JSONArray());
        JSONObject jsonObject = new JSONObject();
        generateIfsStockQueryParams(jsonObject, ifsStockQueryDTO, ifsStockQueryDTO.getPage(), ifsStockQueryDTO.getLimit());
        Result result = ifsApiUtils.getIfsStock(jsonObject.toJSONString());
        if (result.getCode() == 200) {
            JSONObject data = (JSONObject) JSON.toJSON(result.getData());
            JSONArray array = new JSONArray();
            for (int i = 0; i < data.getJSONArray("LIST_INFO").size(); i++) {
                JSONObject listInfo = data.getJSONArray("LIST_INFO").getJSONObject(i);
                array.add(listInfo);
            }
            //获取总数量
            int count = data.getIntValue("TOTAL_RECORD");
            //获取页数
            int total = (int) Math.ceil((double) count / (double) ifsStockQueryDTO.getLimit());
            jresult.put("total", total);
            jresult.put("count", count);
            jresult.put("data", array);
        }
        return Result.success(jresult);
    }
    public void generateIfsStockQueryParams(JSONObject result, IfsStockQueryDTO ifsStockQueryDTO, Long pageNo, Long pageSize) {
        result.put("PAGE", pageNo);
        result.put("LIMIT", pageSize);
        result.put("WAREHOUSE", "成品仓库");
        result.put("QUANTITY_FLAG", ">0");
        //表里面的OTC行号
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getCotcOrderNo())) {
            result.put("C_OTC_ORDER_NO", ifsStockQueryDTO.getCotcOrderNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getCotcLineNo())) {
            result.put("C_OTC_LINE_NO", ifsStockQueryDTO.getCotcLineNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getPartNo())) {
            result.put("PART_NO", ifsStockQueryDTO.getPartNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getPartDescription())) {
            result.put("PART_DESC", "%" + ifsStockQueryDTO.getPartDescription() + "%");
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getLocNo())) {
            result.put("LOCATION_NO", ifsStockQueryDTO.getLocNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getLocDesc())) {
            result.put("LOCATION_DESC", ifsStockQueryDTO.getLocDesc());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getLotBatchNo())) {
            result.put("LOT_BATCH_NO", ifsStockQueryDTO.getLotBatchNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getWdrNo())) {
            result.put("WDR_NO", ifsStockQueryDTO.getWdrNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getWarehouse())) {
            result.put("WAREHOUSE", ifsStockQueryDTO.getWarehouse());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getLocationGroup())) {
            result.put("LOCATION_GROUP", ifsStockQueryDTO.getLocationGroup());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getLocationGroupDesc())) {
            result.put("LOCATION_GROUP_DESC", ifsStockQueryDTO.getLocationGroupDesc());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getReelNumber())) {
            result.put("ATTR1", ifsStockQueryDTO.getReelNumber());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getStartMeter())) {
            result.put("ATTR2", ifsStockQueryDTO.getStartMeter());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getEndMeter())) {
            result.put("ATTR3", ifsStockQueryDTO.getEndMeter());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getOuterColor())) {
            result.put("ATTR4", ifsStockQueryDTO.getOuterColor());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getInsulationColor())) {
            result.put("ATTR5", ifsStockQueryDTO.getInsulationColor());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getOtcOrderNo())) {
            result.put("ATTR6", ifsStockQueryDTO.getOtcOrderNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getMpsNo())) {
            result.put("ATTR7", ifsStockQueryDTO.getMpsNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getLetteringInfo())) {
            result.put("ATTR8", ifsStockQueryDTO.getLetteringInfo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getSStockQuantity())) {
            result.put("ATTR9", ifsStockQueryDTO.getSStockQuantity());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getSAvailableStockQuantity())) {
            result.put("ATTR10", ifsStockQueryDTO.getSAvailableStockQuantity());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getSunit())) {
            result.put("ATTR11", ifsStockQueryDTO.getSunit());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getStockSource())) {
            result.put("ATTR12", ifsStockQueryDTO.getStockSource());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getInspInstorageTime())) {
            result.put("ATTR13", ifsStockQueryDTO.getInspInstorageTime());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getTestRemark())) {
            result.put("ATTR14", ifsStockQueryDTO.getTestRemark());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getGrossWeight())) {
            result.put("ATTR15", ifsStockQueryDTO.getGrossWeight());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getNetWeight())) {
            result.put("ATTR16", ifsStockQueryDTO.getNetWeight());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getPackingManner())) {
            result.put("ATTR17", ifsStockQueryDTO.getPackingManner());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getCylinderNumber())) {
            result.put("ATTR18", ifsStockQueryDTO.getCylinderNumber());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getRemark())) {
            result.put("ATTR19", ifsStockQueryDTO.getRemark());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getLengthRequirement())) {
            result.put("ATTR20", ifsStockQueryDTO.getLengthRequirement());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getCustomerName())) {
            result.put("ATTR21", ifsStockQueryDTO.getCustomerName());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getSystemNo())) {
            result.put("ATTR22", ifsStockQueryDTO.getSystemNo());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getInSource())) {
            result.put("ATTR23", ifsStockQueryDTO.getInSource());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getSplitQuality())) {
            result.put("ATTR24", ifsStockQueryDTO.getSplitQuality());
        }
        if (StrUtil.isNotBlank(ifsStockQueryDTO.getReserveQuantity())) {
            result.put("QTY_RESERVED", ifsStockQueryDTO.getReserveQuantity());
        }
    }
    /************************************************* å­£åº¦æŠ½æ · ***********************************************************/
    /**
     * æ–°å¢žå­£åº¦æŠ½æ£€
     * @param spotCheckQuarterDto
     * @return
     */
    @Override
    public boolean addQuarter(SpotCheckQuarterDto spotCheckQuarterDto) {
        // æ ¹æ®ç¼–号查询之前的
        SpotCheckQuarter spotCheckQuarter = spotCheckQuarterMapper.selectOne(Wrappers.<SpotCheckQuarter>lambdaQuery()
                .eq(SpotCheckQuarter::getQuarterNo, spotCheckQuarterDto.getQuarterNo())
                .orderByDesc(SpotCheckQuarter::getCreateTime)
                .last("limit 1"));
        if (spotCheckQuarter == null) {
            spotCheckQuarterMapper.insert(spotCheckQuarterDto);
            // æ·»åŠ è¯¦æƒ…
            for (SpotCheckQuarterItem quarterItem : spotCheckQuarterDto.getQuarterItems()) {
                quarterItem.setQuarterId(spotCheckQuarterDto.getQuarterId());
            }
            spotCheckQuarterItemService.saveBatch(spotCheckQuarterDto.getQuarterItems());
        } else {
            // ç´¯åŠ è¯¦æƒ…
            for (SpotCheckQuarterItem quarterItem : spotCheckQuarterDto.getQuarterItems()) {
                quarterItem.setQuarterId(spotCheckQuarter.getQuarterId());
            }
            spotCheckQuarterItemService.saveBatch(spotCheckQuarterDto.getQuarterItems());
        }
        return true;
    }
    /**
     * æŸ¥è¯¢å­£åº¦æŠ½æ ·è¯¦æƒ…
     * @param quarterId
     * @return
     */
    @Override
    public SpotCheckQuarterDto getQuarter(Integer quarterId) {
        SpotCheckQuarter spotCheckQuarter = spotCheckQuarterMapper.selectById(quarterId);
        // æŸ¥è¯¢è¯¦æƒ…
        List<SpotCheckQuarterItem> list = spotCheckQuarterItemService.list(Wrappers.<SpotCheckQuarterItem>lambdaQuery()
                .eq(SpotCheckQuarterItem::getQuarterId, spotCheckQuarter.getQuarterId()));
        SpotCheckQuarterDto spotCheckQuarterDto = new SpotCheckQuarterDto();
        BeanUtil.copyProperties(spotCheckQuarter, spotCheckQuarterDto);
        spotCheckQuarterDto.setQuarterItems(list);
        return spotCheckQuarterDto;
    }
    /**
     * å­£åº¦æŠ½æ ·åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param spotCheckQuarter
     * @return
     */
    @Override
    public IPage<SpotCheckQuarterDto> getQuarterPage(Page page, SpotCheckQuarterDto spotCheckQuarter) {
        return spotCheckQuarterMapper.getQuarterPage(page, QueryWrappers.queryWrappers(spotCheckQuarter));
    }
    /**
     * åˆ é™¤å­£åº¦æŠ½æ ·
     * @param quarterId
     * @return
     */
    @Override
    public boolean deleteQuarter(Integer quarterId) {
        spotCheckQuarterMapper.deleteById(quarterId);
        spotCheckQuarterItemService.remove(Wrappers.<SpotCheckQuarterItem>lambdaQuery()
                .eq(SpotCheckQuarterItem::getQuarterId, quarterId));
        return true;
    }
    /**
     * æˆå“ä¸‹å•界面查询季度信息
     * @return
     */
    @Override
    public List<Map<String, Object>> getQuarterOnOrder() {
        List<Map<String, Object>> quarterOnOrder = spotCheckQuarterMapper.getQuarterOnOrder();
        for (Map<String, Object> stringMap : quarterOnOrder) {
            List<SpotCheckQuarterItem> list = spotCheckQuarterItemService.list(Wrappers.<SpotCheckQuarterItem>lambdaQuery()
                    .eq(SpotCheckQuarterItem::getQuarterId, (Integer) stringMap.get("value")));
            List<Map<String, Object>> itemMaps = list.stream().map(spotCheckQuarterItem -> {
                Map<String, Object> map = new HashMap<>();
                map.put("value", spotCheckQuarterItem.getQuarterItemId());
                map.put("label", spotCheckQuarterItem.getProductModel() + " "
                        + spotCheckQuarterItem.getProductType() + " "
                        + spotCheckQuarterItem.getSpotCheckNumber());
                return map;
            }).collect(Collectors.toList());
            stringMap.put("children", itemMaps);
        }
        return quarterOnOrder;
    }
    /**
     * ä¿®æ”¹å­£åº¦æ£€éªŒ
     * @param spotCheckQuarterDto
     * @return
     */
    @Override
    public boolean updateQuarterOnOrder(SpotCheckQuarterDto spotCheckQuarterDto) {
        if (CollectionUtils.isNotEmpty(spotCheckQuarterDto.getQuarterItems())) {
            // æ¸…除之前详情
            spotCheckQuarterItemService.remove(Wrappers.<SpotCheckQuarterItem>lambdaQuery()
                    .eq(SpotCheckQuarterItem::getQuarterId, spotCheckQuarterDto.getQuarterId()));
            // æ·»åŠ è¯¦æƒ…
            for (SpotCheckQuarterItem quarterItem : spotCheckQuarterDto.getQuarterItems()) {
                quarterItem.setQuarterId(spotCheckQuarterDto.getQuarterId());
            }
            spotCheckQuarterItemService.saveBatch(spotCheckQuarterDto.getQuarterItems());
        }
        spotCheckQuarterMapper.updateById(spotCheckQuarterDto);
        return true;
    }
    /**
     * ç”Ÿæˆæœ€ç»ˆæŠ¥å‘Š
     * @param quarterId
     * @return
     */
    @Override
    public boolean finalReportQuarter(Integer quarterId, HttpServletResponse response) {
        // æ·»åŠ æŠ¥å‘Šä¿¡æ¯
        SpotCheckQuarter spotCheckQuarter = spotCheckQuarterMapper.selectById(quarterId);
        // æŸ¥è¯¢è¯¦æƒ…
        List<SpotCheckQuarterItem> itemList = spotCheckQuarterItemService.list(Wrappers.<SpotCheckQuarterItem>lambdaQuery()
                .eq(SpotCheckQuarterItem::getQuarterId, spotCheckQuarter.getQuarterId()));
        for (SpotCheckQuarterItem spotCheckQuarterItem : itemList) {
            // æ‹¼æŽ¥åž‹å·å’Œæ•°é‡
            spotCheckQuarterItem.setSpotCheckNumber((StringUtils.isBlank(spotCheckQuarterItem.getProductModel()) ? "" : spotCheckQuarterItem.getProductModel()) +
                    (StringUtils.isBlank(spotCheckQuarterItem.getSpotCheckNumber()) ? "" : spotCheckQuarterItem.getSpotCheckNumber()));
        }
        //编制人
        String writeUrl = null;
        if (spotCheckQuarter.getWriteUser() != null) {
            try {
                writeUrl = userMapper.selectById(spotCheckQuarter.getWriteUser()).getSignatureUrl();
            } catch (Exception e) {
                throw new ErrorException("找不到编制人的签名");
            }
            if (StrUtil.isBlank(writeUrl)) {
                throw new ErrorException("找不到编制人的签名");
            }
        }
        // åˆå§‹åŒ–所有的 countersignUrl å˜é‡
        String[] countersignUrls = new String[7];
        // å¦‚æžœ spotCheckQuarter.getCountersignUser() ä¸æ˜¯ç©ºæˆ–空白字符串
        if (StrUtil.isNotBlank(spotCheckQuarter.getCountersignUser())) {
            String[] split = spotCheckQuarter.getCountersignUser().split(",");
            // éåކ split æ•°ç»„,并将元素依次赋值给 countersignUrls æ•°ç»„
            for (int i = 0; i < Math.min(split.length, countersignUrls.length); i++) {
                String countersignUrl = null;
                try {
                    countersignUrl = userMapper.selectById(Integer.parseInt(split[i])).getSignatureUrl();
                } catch (Exception e) {
                    throw new ErrorException("找不到编制人的签名");
                }
                if (StrUtil.isBlank(countersignUrl)) {
                    throw new ErrorException("找不到编制人的签名");
                }
                countersignUrls[i] = countersignUrl;
            }
        }
        // å°† countersignUrls æ•°ç»„中的值依次赋值给 countersignUrl1 åˆ° countersignUrl7
        String countersignUrl1 = countersignUrls[0];
        String countersignUrl2 = countersignUrls[1];
        String countersignUrl3 = countersignUrls[2];
        String countersignUrl4 = countersignUrls[3];
        String countersignUrl5 = countersignUrls[4];
        String countersignUrl6 = countersignUrls[5];
        String countersignUrl7 = countersignUrls[6];
        //审核人
        String examineUrl = null;
        if (spotCheckQuarter.getExamineUser() != null) {
            try {
                examineUrl = userMapper.selectById(spotCheckQuarter.getExamineUser()).getSignatureUrl();
            } catch (Exception e) {
                throw new ErrorException("找不到审核人的签名");
            }
            if (StrUtil.isBlank(examineUrl)) {
                throw new ErrorException("找不到审核人的签名");
            }
        }
        //批准人
        String ratifyUrl = null;
        if (spotCheckQuarter.getRatifyUser() != null) {
            try {
                ratifyUrl = userMapper.selectById(spotCheckQuarter.getRatifyUser()).getSignatureUrl();
            } catch (Exception e) {
                throw new ErrorException("找不到批准人的签名");
            }
            if (StrUtil.isBlank(ratifyUrl)) {
                throw new ErrorException("找不到批准人的签名");
            }
        }
        String finalWriteUrl = writeUrl;
        String finalExamineUrl = examineUrl;
        String finalRatifyUrl = ratifyUrl;
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/spot_check_quarter.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("quarter", spotCheckQuarter);
                    put("quarterItems", itemList);
                    put("writeUrl", StrUtil.isBlank(finalWriteUrl) ? null :
                            Pictures.ofLocal(imgUrl + "/" + finalWriteUrl).create());
                    put("countersignUrl1", StrUtil.isBlank(countersignUrl1) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl1).create());
                    put("countersignUrl2", StrUtil.isBlank(countersignUrl2) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl2).create());
                    put("countersignUrl3", StrUtil.isBlank(countersignUrl3) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl3).create());
                    put("countersignUrl4", StrUtil.isBlank(countersignUrl4) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl4).create());
                    put("countersignUrl5", StrUtil.isBlank(countersignUrl5) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl5).create());
                    put("countersignUrl6", StrUtil.isBlank(countersignUrl6) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl6).create());
                    put("countersignUrl7", StrUtil.isBlank(countersignUrl7) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl7).create());
                    put("examineUrl", StrUtil.isBlank(finalExamineUrl) ? null :
                            Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create());
                    put("ratifyUrl", StrUtil.isBlank(finalRatifyUrl) ? null :
                            Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create());
                    put("createDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(spotCheckQuarter.getCreateTime())).create());
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    spotCheckQuarter.getQuarterNo() + "抽样计划", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
        return true;
    }
    /******************************************************* å¹´åº¦æŠ½æ ·  *************************************************************/
    @Override
    public boolean addSpotCheckYear(SpotCheckYearDto spotCheckYearDto) {
        spotCheckYearMapper.insert(spotCheckYearDto);
        // è¯¦æƒ…
        for (SpotCheckYearItem yearItem : spotCheckYearDto.getYearItems()) {
            yearItem.setYearId(spotCheckYearDto.getYearId());
        }
        spotCheckYearItemService.saveBatch(spotCheckYearDto.getYearItems());
        return true;
    }
    @Override
    public SpotCheckYearDto getSpotCheckYear(Integer yearId) {
        SpotCheckYear spotCheckYear = spotCheckYearMapper.selectById(yearId);
        // æŸ¥è¯¢è¯¦æƒ…
        List<SpotCheckYearItem> list = spotCheckYearItemService.list(Wrappers.<SpotCheckYearItem>lambdaQuery()
                .eq(SpotCheckYearItem::getYearId, spotCheckYear.getYearId()));
        SpotCheckYearDto spotCheckYearDto = new SpotCheckYearDto();
        BeanUtil.copyProperties(spotCheckYear, spotCheckYearDto);
        spotCheckYearDto.setYearItems(list);
        return spotCheckYearDto;
    }
    @Override
    public IPage<SpotCheckYearDto> getSpotCheckYearPage(Page page, SpotCheckYearDto spotCheckYear) {
        return spotCheckYearMapper.getSpotCheckYearPage(page, QueryWrappers.queryWrappers(spotCheckYear));
    }
    @Override
    public boolean deleteSpotCheckYear(Integer yearId) {
        spotCheckYearMapper.deleteById(yearId);
        spotCheckYearItemService.remove(Wrappers.<SpotCheckYearItem>lambdaQuery()
                .eq(SpotCheckYearItem::getYearId, yearId));
        return true;
    }
    /**
     * ä¿®æ”¹å¹´åº¦æ£€éªŒ
     * @param spotCheckYearDto
     * @return
     */
    @Override
    public boolean updateSpotCheckYear(SpotCheckYearDto spotCheckYearDto) {
        spotCheckYearMapper.updateById(spotCheckYearDto);
        // åˆ é™¤è¯¦æƒ…
        spotCheckYearItemService.remove(Wrappers.<SpotCheckYearItem>lambdaQuery()
                .eq(SpotCheckYearItem::getYearId, spotCheckYearDto.getYearId()));
        // é‡æ–°æ–°å¢ž
        for (SpotCheckYearItem yearItem : spotCheckYearDto.getYearItems()) {
            yearItem.setYearId(spotCheckYearDto.getYearId());
        }
        spotCheckYearItemService.saveBatch(spotCheckYearDto.getYearItems());
        return false;
    }
    @Override
    public boolean finalReportSpotCheckYear(Integer yearId, HttpServletResponse response) {
        SpotCheckYear spotCheckYear = spotCheckYearMapper.selectById(yearId);
        // æŸ¥è¯¢è¯¦æƒ…
        List<SpotCheckYearItem> itemList = spotCheckYearItemService.list(Wrappers.<SpotCheckYearItem>lambdaQuery()
                .eq(SpotCheckYearItem::getYearId, spotCheckYear.getYearId()));
        //编制人
        String writeUrl = null;
        if (spotCheckYear.getWriteUser() != null) {
            try {
                writeUrl = userMapper.selectById(spotCheckYear.getWriteUser()).getSignatureUrl();
            } catch (Exception e) {
                throw new ErrorException("找不到编制人的签名");
            }
            if (StrUtil.isBlank(writeUrl)) {
                throw new ErrorException("找不到编制人的签名");
            }
        }
        // åˆå§‹åŒ–所有的 countersignUrl å˜é‡
        String[] countersignUrls = new String[7];
        // å¦‚果不是空或空白字符串
        if (StrUtil.isNotBlank(spotCheckYear.getCountersignUser())) {
            String[] split = spotCheckYear.getCountersignUser().split(",");
            // éåކ split æ•°ç»„,并将元素依次赋值给 countersignUrls æ•°ç»„
            for (int i = 0; i < Math.min(split.length, countersignUrls.length); i++) {
                String countersignUrl = null;
                try {
                    countersignUrl = userMapper.selectById(Integer.parseInt(split[i])).getSignatureUrl();
                } catch (Exception e) {
                    throw new ErrorException("找不到编制人的签名");
                }
                if (StrUtil.isBlank(countersignUrl)) {
                    throw new ErrorException("找不到编制人的签名");
                }
                countersignUrls[i] = countersignUrl;
            }
        }
        // å°† countersignUrls æ•°ç»„中的值依次赋值给 countersignUrl1 åˆ° countersignUrl7
        String countersignUrl1 = countersignUrls[0];
        String countersignUrl2 = countersignUrls[1];
        String countersignUrl3 = countersignUrls[2];
        String countersignUrl4 = countersignUrls[3];
        String countersignUrl5 = countersignUrls[4];
        String countersignUrl6 = countersignUrls[5];
        String countersignUrl7 = countersignUrls[6];
        //审核人
        String examineUrl = null;
        if (spotCheckYear.getExamineUser() != null) {
            try {
                examineUrl = userMapper.selectById(spotCheckYear.getExamineUser()).getSignatureUrl();
            } catch (Exception e) {
                throw new ErrorException("找不到审核人的签名");
            }
            if (StrUtil.isBlank(examineUrl)) {
                throw new ErrorException("找不到审核人的签名");
            }
        }
        //批准人
        String ratifyUrl = null;
        if (spotCheckYear.getRatifyUser() != null) {
            try {
                ratifyUrl = userMapper.selectById(spotCheckYear.getRatifyUser()).getSignatureUrl();
            } catch (Exception e) {
                throw new ErrorException("找不到批准人的签名");
            }
            if (StrUtil.isBlank(ratifyUrl)) {
                throw new ErrorException("找不到批准人的签名");
            }
        }
        String finalWriteUrl = writeUrl;
        String finalExamineUrl = examineUrl;
        String finalRatifyUrl = ratifyUrl;
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/spot_check_year.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("year", spotCheckYear);
                    put("yearItems", itemList);
                    put("writeUrl", StrUtil.isBlank(finalWriteUrl) ? null :
                            Pictures.ofLocal(imgUrl + "/" + finalWriteUrl).create());
                    put("countersignUrl1", StrUtil.isBlank(countersignUrl1) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl1).create());
                    put("countersignUrl2", StrUtil.isBlank(countersignUrl2) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl2).create());
                    put("countersignUrl3", StrUtil.isBlank(countersignUrl3) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl3).create());
                    put("countersignUrl4", StrUtil.isBlank(countersignUrl4) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl4).create());
                    put("countersignUrl5", StrUtil.isBlank(countersignUrl5) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl5).create());
                    put("countersignUrl6", StrUtil.isBlank(countersignUrl6) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl6).create());
                    put("countersignUrl7", StrUtil.isBlank(countersignUrl7) ? null :
                            Pictures.ofLocal(imgUrl + "/" + countersignUrl7).create());
                    put("examineUrl", StrUtil.isBlank(finalExamineUrl) ? null :
                            Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create());
                    put("ratifyUrl", StrUtil.isBlank(finalRatifyUrl) ? null :
                            Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create());
                    put("createDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(spotCheckYear.getCreateTime())).create());
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    spotCheckYear.getYearHead(), "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return true;
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,111 @@
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.mapper.InsUnqualifiedHandlerFileMapper;
import com.ruoyi.inspect.pojo.InsUnqualifiedHandlerFile;
import com.ruoyi.inspect.service.InsUnqualifiedHandlerFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€ins_unqualified_handler_file(不合格处理附件记录表)】的数据库操作Service实现
* @createDate 2024-07-31 13:38:38
*/
@Service
@Slf4j
public class InsUnqualifiedHandlerFileServiceImpl extends ServiceImpl<InsUnqualifiedHandlerFileMapper, InsUnqualifiedHandlerFile>
    implements InsUnqualifiedHandlerFileService {
    @Value("${wordUrl}")
    private String wordUrl;
    @Value("${file.path}")
    private String imgUrl;
    @Override
    public InsUnqualifiedHandlerFile uploadFile(Long handlerId, MultipartFile file) {
        String urlString;
        String pathName;
        String path;
        String prefix;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        InsUnqualifiedHandlerFile unqualifiedHandlerFile = new InsUnqualifiedHandlerFile();
//        unqualifiedHandlerFile.setUnqualifiedId(handlerId);
        unqualifiedHandlerFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // æ˜¯å›¾ç‰‡
            path = imgUrl;
            prefix = "/image/";
            unqualifiedHandlerFile.setType(1);
        } else {
            // æ˜¯æ–‡ä»¶
            path = wordUrl;
            prefix = "/word/";
            unqualifiedHandlerFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            unqualifiedHandlerFile.setFileUrl(pathName);
            baseMapper.insert(unqualifiedHandlerFile);
            return unqualifiedHandlerFile;
        } catch (Exception e) {
            e.printStackTrace();
            log.error("附件上传错误");
            throw new ErrorException(e.getMessage());
        }
    }
    @Override
    public void downloadOAFile(Long handlerFileId, HttpServletResponse response) {
        response.reset();
        String fileName;
        try {
            //查询上传附件记录
            InsUnqualifiedHandlerFile file = baseMapper.selectById(handlerFileId);
            if (file != null){
                fileName = file.getFileName();
                fileName =  URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
                response.setContentType("application/vnd.ms-excel");
                response.setHeader("Cache-Control", "no-cache");
                response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
                response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
                //获取文件夹路径
                String path = file.getType()==1?imgUrl:wordUrl;
                //文件完整路径
                String fullPath = path + file.getFileUrl();
                //判断文件是否存在
                File fullFile = new File(fullPath);
                if(fullFile.exists()){
                    IoUtil.copy(Files.newInputStream(fullFile.toPath()),response.getOutputStream());
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,280 @@
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.oa.OAProcess;
import com.ruoyi.common.oa.OAProperty;
import com.ruoyi.common.oa.OAResult;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.PushOADto;
import com.ruoyi.inspect.dto.UnqualifiedHandlerDto;
import com.ruoyi.inspect.mapper.InsOrderMapper;
import com.ruoyi.inspect.mapper.InsUnqualifiedHandlerMapper;
import com.ruoyi.inspect.pojo.CommonOa;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsUnqualifiedHandler;
import com.ruoyi.inspect.pojo.InsUnqualifiedHandlerFile;
import com.ruoyi.inspect.service.CommonOaService;
import com.ruoyi.inspect.service.InsUnqualifiedHandlerFileService;
import com.ruoyi.inspect.service.InsUnqualifiedHandlerService;
import com.ruoyi.inspect.vo.UnqualifiedHandlerVO;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author 27233
 * @description é’ˆå¯¹è¡¨ã€ins_unqualified_handler(不合格处理表)】的数据库操作Service实现
 * @createDate 2024-07-31 13:38:14
 */
@Service
@Slf4j
public class InsUnqualifiedHandlerServiceImpl extends ServiceImpl<InsUnqualifiedHandlerMapper, InsUnqualifiedHandler>
        implements InsUnqualifiedHandlerService {
    @Resource
    private CommonOaService commonOaService;
    @Resource
    private OAProperty oaProperty;
    @Resource
    private InsUnqualifiedHandlerFileService insUnqualifiedHandlerFileService;
    @Resource
    private InsOrderMapper insOrderMapper;
    @Override
    public IPage<UnqualifiedHandlerVO> pageList(Page page, UnqualifiedHandlerDto unqualifiedHandlerDto) {
        return baseMapper.selectPageList(page, QueryWrappers.queryWrappers(unqualifiedHandlerDto));
    }
    @Override
    public Result pushOA(PushOADto pushOADto) {
        //获取不合格处理记录
        UnqualifiedHandlerVO vo = baseMapper.findById(pushOADto.getHandlerId());
        if (vo.getRequestId() != null) {
            throw new ErrorException("该不合格处理已提交过OA");
        }
        //提交oa相关字段赋值
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        Map<String, String> mainFields = new HashMap<>();
        mainFields.put("bh", vo.getNo());//编号
        mainFields.put("gysmc", vo.getSupplierName());//供应商名称
        mainFields.put("wlmc", vo.getMaterialName());//物料名称
        mainFields.put("scpc", vo.getProductionBatch());//生产批次
        mainFields.put("dhsl", vo.getCargoQuantity());//到货数量
        mainFields.put("ggxh", vo.getSpecsModels());//规格型号
        mainFields.put("bjrq", vo.getInspectTime().format(formatter));//报检日期
        mainFields.put("fkr", SecurityUtils.getUsername());//反馈人
        mainFields.put("fkrq", vo.getFeedbackTime().format(formatter));//反馈日期
        mainFields.put("fl", vo.getClassification());//分类
        mainFields.put("bhggs", vo.getOffGradeAscription());//不合格归属
        mainFields.put("bhgqkms", vo.getUnqualifiedDesc());//不合格情况描述
        //查询附件
        List<InsUnqualifiedHandlerFile> handlerFiles = insUnqualifiedHandlerFileService.list(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
                .eq(InsUnqualifiedHandlerFile::getUnqualifiedId, vo.getHandlerId()));
        if (CollectionUtils.isNotEmpty(handlerFiles)) {
            StringBuilder fileUrl = new StringBuilder();
            for (int i = 0; i < handlerFiles.size(); i++) {
                String path = handlerFiles.get(i).getType().equals(1) ? "/lims/img/" : "/lims/word/";
                if (i == handlerFiles.size() - 1) {
                    fileUrl.append("<a href='" + oaProperty.getProdIp()).append(path + handlerFiles.get(i).getFileUrl()
                            + "'target='_blank'>" + handlerFiles.get(i).getFileName() + "</a>");
                } else {
                    fileUrl.append("<a href='" + oaProperty.getProdIp()).append(path + handlerFiles.get(i).getFileUrl()
                            + "'target='_blank'>" + handlerFiles.get(i).getFileName() + "</a>").append("<br/>");
                }
            }
            mainFields.put("xlimsfj", fileUrl.toString());
        }
        //流程标题
        String requestName = vo.getHeadline();
        //发起OA
        boolean oa = false;
        try {
            log.info("发起不合格处理OA审核流程");
            String unqualifiedProcessId = oaProperty.getUnqualifiedProcessId();
            OAResult oaResult = OAProcess.start(mainFields, requestName, unqualifiedProcessId,SecurityUtils.getUsername());
            log.info("不合格处理OA审核流程结束,返回结果->{}" + oaResult);
            oa = oaResult.success();
            if (oa) {
                String addWorkflowResult = oaResult.getAddWorkflowResult();
                baseMapper.update(null, new LambdaUpdateWrapper<InsUnqualifiedHandler>()
                        .set(InsUnqualifiedHandler::getRequestId, addWorkflowResult)
                        .set(InsUnqualifiedHandler::getOaState, 2)
                        .eq(InsUnqualifiedHandler::getId, pushOADto.getHandlerId()));
            } else {
                return Result.fail("提交oa失败: " + oaResult.getErrorMsg());
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return Result.success();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void unqualifiedHandlerOACallback(Long oaWorkId, String checkResult, JSONArray objects) {
        // æ²¡æœ‰è¿™ä¸ªå°±ç»“束
        Long count1 = baseMapper.selectCount(Wrappers.<InsUnqualifiedHandler>lambdaQuery()
                .eq(InsUnqualifiedHandler::getRequestId, Integer.valueOf(String.valueOf(oaWorkId))));
        if (count1 == 0) {
            return;
        }
        //oa状态:3通过 4驳回
        Integer oaState = "1".equals(checkResult) ? 3 : 4;
        baseMapper.update(null, new LambdaUpdateWrapper<InsUnqualifiedHandler>()
                .set(InsUnqualifiedHandler::getOaState, oaState)
                .ge(InsUnqualifiedHandler::getRequestId, Integer.valueOf(String.valueOf(oaWorkId))));
        //保存oa审批流程记录
        List<CommonOa> commonOaList = new ArrayList<>();
        objects.forEach(l -> {
            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(l));
            CommonOa oa = new CommonOa();
            oa.setApprover(jsonObject.getString("operatorName"));
            oa.setWorkflowId(oaWorkId);
            oa.setOperation(jsonObject.getString("operateType"));
            oa.setApprovalDate(jsonObject.getString("operateDate"));
            oa.setApprovalOpinion(jsonObject.getString("remark"));
            oa.setNodeName(jsonObject.getString("nodeName"));
            oa.setApprovalTime(jsonObject.getString("operateTime"));
            //查询判断之前是否添加过
            long count = commonOaService.count(Wrappers.<CommonOa>lambdaQuery()
                    .eq(CommonOa::getApprover, oa.getApprover())
                    .eq(CommonOa::getWorkflowId, oa.getWorkflowId())
                    .eq(CommonOa::getOperation, oa.getOperation())
                    .eq(CommonOa::getApprovalDate, oa.getApprovalDate())
                    .eq(CommonOa::getApprovalOpinion, oa.getApprovalOpinion())
                    .eq(CommonOa::getNodeName, oa.getNodeName())
                    .eq(CommonOa::getApprovalTime, oa.getApprovalTime())
            );
            // æ²¡æœ‰é‡å¤æ·»åŠ 
            if (count == 0) {
                commonOaList.add(oa);
            }
        });
        commonOaService.saveBatch(commonOaList);
    }
    /**
     * æŸ¥çœ‹oa流程
     * @param id
     * @return
     */
    @Override
    public List<CommonOa> getOaFlow(Integer id) {
        return baseMapper.getOaFlow(id);
    }
    /**
     * æ–°å¢žä¸åˆæ ¼å¤„理
     * @param unqualifiedHandlerDto
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean addUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto) {
        if (unqualifiedHandlerDto.getInventoryQuantityId() == null) {
            throw new ErrorException("缺少原材料id");
        }
        long count = this.count(Wrappers.<InsUnqualifiedHandler>lambdaQuery()
                .eq(InsUnqualifiedHandler::getInsOrderId, unqualifiedHandlerDto.getInsOrderId()));
        if (count > 0) {
            throw new ErrorException("当前检验单已提交过不合格");
        }
        // åŽŸææ–™ç¼–å·åˆ‡å‰²
        InsOrder order = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery()
                .eq(InsOrder::getId, unqualifiedHandlerDto.getInsOrderId())
                .select(InsOrder::getEntrustCode));
        unqualifiedHandlerDto.setNo(order.getEntrustCode());
        this.save(unqualifiedHandlerDto);
        if (CollectionUtils.isNotEmpty(unqualifiedHandlerDto.getUnqualifiedHandlerFiles())) {
            for (InsUnqualifiedHandlerFile unqualifiedHandlerFile : unqualifiedHandlerDto.getUnqualifiedHandlerFiles()) {
                unqualifiedHandlerFile.setUnqualifiedId(unqualifiedHandlerDto.getId());
            }
            insUnqualifiedHandlerFileService.updateBatchById(unqualifiedHandlerDto.getUnqualifiedHandlerFiles());
        }
        return true;
    }
    /**
     * ç¼–辑不合格处理
     * @param unqualifiedHandlerDto
     * @return
     */
    @Override
    public boolean updateUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto) {
        // åˆ é™¤é™„ä»¶, é‡æ–°æ·»åŠ 
        insUnqualifiedHandlerFileService.remove(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
                .eq(InsUnqualifiedHandlerFile::getUnqualifiedId, unqualifiedHandlerDto.getId()));
        if (CollectionUtils.isNotEmpty(unqualifiedHandlerDto.getUnqualifiedHandlerFiles())) {
            for (InsUnqualifiedHandlerFile unqualifiedHandlerFile : unqualifiedHandlerDto.getUnqualifiedHandlerFiles()) {
                unqualifiedHandlerFile.setUnqualifiedId(unqualifiedHandlerDto.getId());
            }
            insUnqualifiedHandlerFileService.updateBatchById(unqualifiedHandlerDto.getUnqualifiedHandlerFiles());
        }
        return this.updateById(unqualifiedHandlerDto);
    }
    /**
     * æŸ¥çœ‹ä¸åˆæ ¼å¤„理界面
     * @param id
     * @return
     */
    @Override
    public UnqualifiedHandlerDto getUnqualifiedHandler(Integer id) {
        InsUnqualifiedHandler insUnqualifiedHandler = this.getById(id);
        UnqualifiedHandlerDto unqualifiedHandlerDto = new UnqualifiedHandlerDto();
        BeanUtil.copyProperties(insUnqualifiedHandler, unqualifiedHandlerDto);
        // æŸ¥çœ‹é™„ä»¶
        List<InsUnqualifiedHandlerFile> list = insUnqualifiedHandlerFileService.list(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
                .eq(InsUnqualifiedHandlerFile::getUnqualifiedId, unqualifiedHandlerDto.getId()));
        unqualifiedHandlerDto.setUnqualifiedHandlerFiles(list);
        return unqualifiedHandlerDto;
    }
    /**
     * åˆ é™¤ä¸åˆæ ¼
     * @param id
     * @return
     */
    @Override
    public boolean deleteUnqualifiedHandler(Integer id) {
        insUnqualifiedHandlerFileService.remove(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
                .eq(InsUnqualifiedHandlerFile::getUnqualifiedId, id));
        this.removeById(id);
        return true;
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/SpotCheckQuarterItemServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.inspect.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.inspect.mapper.SpotCheckQuarterItemMapper;
import com.ruoyi.inspect.pojo.SpotCheckQuarterItem;
import com.ruoyi.inspect.service.SpotCheckQuarterItemService;
import org.springframework.stereotype.Service;
/**
 * å­£åº¦æŠ½æ ·è®¡åˆ’详情表
 *
 * @author zhuo
 * @since 2024-10-09
 */
@Service
public class SpotCheckQuarterItemServiceImpl extends ServiceImpl<SpotCheckQuarterItemMapper, SpotCheckQuarterItem> implements SpotCheckQuarterItemService {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/SpotCheckYearItemServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.inspect.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.inspect.mapper.SpotCheckYearItemMapper;
import com.ruoyi.inspect.pojo.SpotCheckYearItem;
import com.ruoyi.inspect.service.SpotCheckYearItemService;
import org.springframework.stereotype.Service;
/**
 * å¹´åº¦æŠ½æ ·è®¡åˆ’详情表
 *
 * @author zhuo
 * @since 2024-10-10
 */
@Service
public class SpotCheckYearItemServiceImpl extends ServiceImpl<SpotCheckYearItemMapper, SpotCheckYearItem> implements SpotCheckYearItemService {
}
inspect-server/src/main/resources/mapper/SpotCheckQuarterMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<?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.ruoyi.inspect.mapper.SpotCheckQuarterMapper">
    <select id="getQuarterPage" resultType="com.ruoyi.inspect.dto.SpotCheckQuarterDto">
        select * from (        select scq.quarter_id,
        scq.quarter_no,
        scq.quarter_status,
        scq.file_url,
        scq.remark,
        u.name create_user_name,
        scq.create_time
        from spot_check_quarter scq
        left join user u on u.id = scq.create_user) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="getQuarterOnOrder" resultType="java.util.Map">
        select quarter_id value,
               quarter_no label
        from spot_check_quarter
    </select>
</mapper>
inspect-server/src/main/resources/mapper/SpotCheckYearMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<?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.ruoyi.inspect.mapper.SpotCheckYearMapper">
    <select id="getSpotCheckYearPage" resultType="com.ruoyi.inspect.dto.SpotCheckYearDto">
        select * from (select scy.year_id,
        scy.year_head,
        scy.table_remark,
        scy.file_url,
        scy.remark,
        u.name create_user_name,
        scy.create_time
        from spot_check_year scy
        left join user u on u.id = scy.create_user) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProperty.java
@@ -17,10 +17,10 @@
     */
    private String oaHost;
//    /**
//     * æ–‡ä»¶æŸ¥çœ‹ip地址
//     */
//    private String prodIp;
    /**
     * æ–‡ä»¶æŸ¥çœ‹ip地址
     */
    private String prodIp;
    /**
     * è£…备电缆:不合格审批oa的id
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -23,7 +23,7 @@
/**
 * spring security配置
 *
 *
 * @author ruoyi
 */
@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true)
@@ -35,7 +35,7 @@
     */
    @Autowired
    private UserDetailsService userDetailsService;
    /**
     * è®¤è¯å¤±è´¥å¤„理类
     */
@@ -53,7 +53,7 @@
     */
    @Autowired
    private JwtAuthenticationTokenFilter authenticationTokenFilter;
    /**
     * è·¨åŸŸè¿‡æ»¤å™¨
     */
@@ -111,7 +111,7 @@
            .authorizeHttpRequests((requests) -> {
                permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                // å¯¹äºŽç™»å½•login æ³¨å†Œregister éªŒè¯ç captchaImage å…è®¸åŒ¿åè®¿é—®
                requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
                requests.antMatchers("/login", "/register", "/captchaImage", "/unqualifiedHandler/callback").permitAll()
                    // é™æ€èµ„源,可匿名访问
                    .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                    .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()