zouyu
8 小时以前 2cf06285f64311722cbf79fd5635b16718635e5e
不合格处理:支持多生产批次提交oa;oa流程查看调整
已修改22个文件
294 ■■■■■ 文件已修改
inspect-server/src/main/java/com/ruoyi/inspect/aspect/MoveLocationAfterPushMesStockAspect.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsPlaceOrderDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/PushOADto.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnqualifiedHandlerDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedHandlerMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/CommonOa.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnqualifiedHandler.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnqualifiedHandlerFile.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedHandlerService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerFileServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsSampleMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-ztns/src/main/resources/application-druid.yml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-ztns/src/main/resources/application-ztns.yml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProperty.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/aspect/MoveLocationAfterPushMesStockAspect.java
@@ -45,6 +45,7 @@
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    public void doAfterReturning(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        log.info("执行同步实时库存到MES,参数:{}",args);
        if(Objects.nonNull(args) && args.length>0) {
            IfsInventoryQuantity ifsInventoryQuantity = BeanUtil.toBean(args[0], IfsInventoryQuantity.class);
            if(Objects.nonNull(ifsInventoryQuantity) && ifsInventoryQuantity.getIsSplitOrder()==1){
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java
@@ -92,6 +92,12 @@
        return Result.success(insOrderService.getInsOrder(orderId));
    }
    @ApiOperation(value = "查询检验下单内容详情列表")
    @PostMapping("/getInsOrderList")
    public Result<?> getInsOrderList(@RequestBody InsPlaceOrderDto insPlaceOrderDto) {
        return Result.success(insOrderService.getInsOrderList(insPlaceOrderDto.getSelectOrderIds()));
    }
    @ApiOperation(value = "审核检验单进行状态修改")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "检验单id", dataTypeClass = Integer.class),
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java
@@ -1,7 +1,6 @@
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.annotation.Anonymous;
@@ -46,6 +45,12 @@
        return Result.success(unqualifiedHandlerService.pageList(page, unqualifiedHandlerDto));
    }
    @ApiOperation(value = "查询不合格处理记录")
    @GetMapping("/getList")
    public Result getList(){
        return Result.success(unqualifiedHandlerService.getList());
    }
    @ApiOperation(value = "附件上传")
    @PostMapping("/uploadFileByUnqualified")
    public Result<?> uploadFileByUnqualified(Long handlerId, MultipartFile file) {
@@ -57,14 +62,12 @@
    @RequestMapping(value = "/callback", produces = "text/plain")
    public String unqualifiedHandlerOACallback(String data){
        String msg = OAProcess.oaReturnMsg(0, "success");
        JSONObject json = JSONObject.parseObject(data);
        log.info("oa回调参数========>" + json);
        JSONObject response = JSONObject.parseObject(data);
        log.info("oa回调参数========>" + response);
        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);
            Long oaWorkId = response.getLong(REQUESTID);
            String checkResult = response.getString(CHECKRESULT);
            unqualifiedHandlerService.unqualifiedHandlerOACallback(oaWorkId, checkResult,response);
        } catch (Exception e) {
            log.error("oa回调失败: " + e.getMessage());
            msg = OAProcess.oaReturnMsg(1, "oa回调失败: " + e.getMessage());
@@ -109,8 +112,8 @@
    @ApiOperation(value = "删除不合格处理")
    @DeleteMapping("/deleteUnqualifiedHandler")
    public Result deleteUnqualifiedHandler(Integer id) {
        return Result.success(unqualifiedHandlerService.deleteUnqualifiedHandler(id));
    public Result deleteUnqualifiedHandler(String groupId) {
        return Result.success(unqualifiedHandlerService.deleteUnqualifiedHandler(groupId));
    }
    @ApiOperation(value = "下载附件")
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsPlaceOrderDto.java
@@ -24,4 +24,7 @@
    @ApiModelProperty("铜单丝订单")
    private CopperInsOrderDto copperInsOrder;
    @ApiModelProperty("选中的订单id列表")
    private List<Integer> selectOrderIds;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/PushOADto.java
@@ -27,4 +27,10 @@
    @ApiModelProperty(value = "IFS域")
    private String contract;
    /**
     * 分组id
     */
    @ApiModelProperty(value = "分组id")
    private String groupId;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnqualifiedHandlerDto.java
@@ -165,4 +165,7 @@
    @ApiModelProperty(value = "物料属性")
    private String materialProp;
    @ApiModelProperty("选中的订单id列表")
    private List<Integer> selectOrderIds;
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
@@ -163,4 +163,5 @@
    IfsOrderVO selectOrderInfoById(@Param("id") Integer id);
    Map<String, Object> selectOrderInfoByIds(@Param("selectOrderIds") List<Integer> selectOrderIds);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedHandlerMapper.java
@@ -32,6 +32,8 @@
     * @return
     */
    List<CommonOa> getOaFlow(@Param("id") Integer id);
    UnqualifiedHandlerVO findByGroupId(@Param("groupId") String groupId, @Param("handlerId") Long handlerId);
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/CommonOa.java
@@ -22,6 +22,11 @@
    private Long id;
    /**
     * 节点id
     */
    private Long operateId;
    /**
     * 节点名称
     */
    private String nodeName;
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnqualifiedHandler.java
@@ -52,7 +52,13 @@
     * 到货数量
     */
    @ApiModelProperty(value = "到货数量")
    private String cargoQuantity;
    private Double cargoQuantity;
    /**
     * 采购单位
     */
    @ApiModelProperty(value = "采购单位")
    private String buyUnitMeas;
    /**
     * 规格型号
@@ -134,4 +140,10 @@
    @ApiModelProperty("是否是旧数据")
    private Boolean isOldData;
    /**
     * 分组id
     */
    @ApiModelProperty("分组id")
    private String groupId;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnqualifiedHandlerFile.java
@@ -29,6 +29,12 @@
    private Long unqualifiedId;
    /**
     * 分组id
     */
    @ApiModelProperty(value = "分组id")
    private String groupId;
    /**
     * 文件类型(1:图片 2:文件)
     */
    @ApiModelProperty(value = "文件类型(1:图片 2:文件)")
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderService.java
@@ -148,4 +148,5 @@
    String moveRawMaterial(IfsInventoryQuantity one);
    Map<String,Object> getInsOrderList(List<Integer> selectOrderIds);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedHandlerService.java
@@ -1,6 +1,7 @@
package com.ruoyi.inspect.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -26,7 +27,7 @@
    Result pushOA(PushOADto pushOADto);
    void unqualifiedHandlerOACallback(Long oaWorkId, String checkResult, JSONArray objects);
    void unqualifiedHandlerOACallback(Long oaWorkId, String checkResult, JSONObject response);
    List<CommonOa> getOaFlow(Integer id);
@@ -36,8 +37,9 @@
    UnqualifiedHandlerDto getUnqualifiedHandler(Integer id);
    boolean deleteUnqualifiedHandler(Integer id);
    boolean deleteUnqualifiedHandler(String groupId);
    void exportUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto, HttpServletResponse response);
    List<Integer> getList();
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -1285,6 +1285,11 @@
        return toLocation;
    }
    @Override
    public Map<String, Object> getInsOrderList(List<Integer> selectOrderIds) {
        return insOrderMapper.selectOrderInfoByIds(selectOrderIds);
    }
    /**
     * 先修改采购订单批次号, 后进行移库操作
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerFileServiceImpl.java
@@ -40,21 +40,17 @@
        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 {
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java
@@ -15,22 +15,26 @@
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.enums.ContractType;
import com.ruoyi.common.numgen.NumberGenerator;
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.common.utils.bean.BeanUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.PushOADto;
import com.ruoyi.inspect.dto.UnqualifiedHandlerDto;
import com.ruoyi.inspect.excel.InsUnqualifiedHandlerExcelData;
import com.ruoyi.inspect.mapper.InsOrderMapper;
import com.ruoyi.inspect.mapper.InsSampleMapper;
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.InsOrderService;
import com.ruoyi.inspect.service.InsUnqualifiedHandlerFileService;
import com.ruoyi.inspect.service.InsUnqualifiedHandlerService;
import com.ruoyi.inspect.vo.UnqualifiedHandlerVO;
@@ -46,10 +50,7 @@
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -69,9 +70,11 @@
    @Resource
    private InsUnqualifiedHandlerFileService insUnqualifiedHandlerFileService;
    @Resource
    private InsOrderMapper insOrderMapper;
    private InsSampleMapper insSampleMapper;
    @Resource
    private ISysDictTypeService sysDictTypeService;
    @Resource
    private NumberGenerator<InsUnqualifiedHandler> insUnqualifiedHandlerNumberGenerator;
    @Override
@@ -122,30 +125,22 @@
    }
    @Override
    public List<Integer> getList() {
        return baseMapper.selectList(null).stream().map(InsUnqualifiedHandler::getInsOrderId).collect(Collectors.toList());
    }
    @Override
    public Result pushOA(PushOADto pushOADto) {
        //获取不合格处理记录
        UnqualifiedHandlerVO vo = baseMapper.findById(pushOADto.getHandlerId());
        UnqualifiedHandlerVO vo = baseMapper.findByGroupId(pushOADto.getGroupId(),pushOADto.getHandlerId());
        //提交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());//不合格情况描述
//        mainFields.put("bh", vo.getNo());//编号
        mainFields.put("gysmcsuppliername", vo.getSupplierName());//供应商名称
        mainFields.put("wlmcmaterialname", vo.getMaterialName());//物料名称
        mainFields.put("scpcproductionbatch", vo.getProductionBatch());//生产批次
        mainFields.put("dhslcargoquantity", vo.getCargoQuantity());//到货数量
        mainFields.put("dhslcargoquantity", vo.getCargoQuantity() + vo.getBuyUnitMeas());//到货数量
        mainFields.put("ggxhspecificationsmodels", vo.getSpecsModels());//规格型号
        mainFields.put("bjrqdeclarationinspectdate", vo.getInspectTime().format(formatter));//报检日期
        mainFields.put("fkrprovideroffeedback", SecurityUtils.getUsername());//反馈人
@@ -177,21 +172,16 @@
        boolean oa = false;
        try {
            log.info("发起不合格处理OA审核流程");
            //根据IFS域获取对应的流程id
            if(StringUtils.isBlank(pushOADto.getContract())){
                throw new RuntimeException("IFS域【"+pushOADto.getContract()+"】不存在,OA流程提交失败");
            }
            String unqualifiedProcessId = StringUtils.equals(ContractType.ZTNS.getValue(),pushOADto.getContract())?oaProperty.getUnqualifiedProcessId():oaProperty.getUnqualifiedProcessIdByKJNS();
            log.info("不合格流程请求参数:{},{},{},{}",mainFields, requestName, unqualifiedProcessId,SecurityUtils.getUsername());
            String unqualifiedProcessId = oaProperty.getUnqualifiedProcessId();
            OAResult oaResult = OAProcess.start(mainFields, requestName, unqualifiedProcessId,SecurityUtils.getUsername());
            log.info("不合格流程ID:{},不合格处理OA审核流程结束,返回结果->{}",unqualifiedProcessId,oaResult);
            log.info("不合格流程ID:{},不合格处理OA审核流程发起成功->{}",unqualifiedProcessId,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()));
                        .eq(InsUnqualifiedHandler::getGroupId, pushOADto.getGroupId()));
            } else {
                return Result.fail("提交oa失败: " + oaResult.getErrorMsg());
            }
@@ -203,47 +193,67 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void unqualifiedHandlerOACallback(Long oaWorkId, String checkResult, JSONArray objects) {
    public void unqualifiedHandlerOACallback(Long oaWorkId, String checkResult, JSONObject response) {
        // 没有这个就结束
        Long count1 = baseMapper.selectCount(Wrappers.<InsUnqualifiedHandler>lambdaQuery()
                .eq(InsUnqualifiedHandler::getRequestId, Integer.valueOf(String.valueOf(oaWorkId))));
        if (count1 == 0) {
            return;
        }
        //处理措施map
        Map<String, String> clcsMap = new HashMap<>();
        clcsMap.put("0","让步放行");
        clcsMap.put("1","退货");
        clcsMap.put("2","部分退货");
        clcsMap.put("3","降级使用");
        //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))));
                .set(InsUnqualifiedHandler::getClassification,response.getString("flclassification"))
                .eq(InsUnqualifiedHandler::getRequestId, Integer.valueOf(String.valueOf(oaWorkId))));
        //保存oa审批流程记录
        List<CommonOa> commonOaList = new ArrayList<>();
        objects.forEach(l -> {
            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(l));
        JSONArray workflowRequestLogs = JSONArray.parseArray(JSONObject.toJSONString(response.get("workflowRequestLogs")));
        for (Object workflowRequestLog : workflowRequestLogs) {
            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(workflowRequestLog));
            CommonOa oa = new CommonOa();
            oa.setApprover(jsonObject.getString("operatorName"));
            oa.setOperateId(jsonObject.getLong("operateId"));
            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"));
            //设置各节点的处理意见
            if(StringUtils.isNotBlank(oa.getNodeName())){
                if(oa.getNodeName().contains("质量")){
                    oa.setOperation(clcsMap.get(response.getString("clcs1")));
                    oa.setApprovalOpinion(response.getString("dbhgcpdclyqdealwiththenonconfo"));//1.对不合格产品的处理要求
                }else if(oa.getNodeName().contains("工艺")){
                    oa.setApprovalOpinion(response.getString("gjyqimprovementrequirements"));//2.改进要求
                }else if(oa.getNodeName().contains("技术")){
                    oa.setOperation(clcsMap.get(response.getString("clcs2")));
                    oa.setApprovalOpinion(response.getString("csyqactionrequirement"));//3.措施要求
                }else if(oa.getNodeName().contains("总经理")){
                    oa.setOperation(clcsMap.get(response.getString("clcs3")));
                    oa.setApprovalOpinion(response.getString("zzclyqfinaltreatmentrequiremen"));//4.最终处理要求
                }else if(oa.getNodeName().contains("核算")){
                    oa.setApprovalOpinion(response.getString("spyqcompensationrequirement"));//5.索赔要求
                }else{
                    oa.setApprovalOpinion(jsonObject.getString("remark"));
                }
            }
            //查询判断之前是否添加过
            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())
            );
                    .eq(CommonOa::getWorkflowId, oaWorkId)
                    .eq(CommonOa::getOperateId, oa.getOperateId()));
            // 没有重复添加
            if (count == 0) {
                commonOaList.add(oa);
            }
        });
        }
        commonOaService.saveBatch(commonOaList);
    }
@@ -266,28 +276,34 @@
    @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()));
                .in(InsUnqualifiedHandler::getInsOrderId, unqualifiedHandlerDto.getSelectOrderIds()));
        if (count > 0) {
            throw new ErrorException("当前检验单已提交过不合格");
            throw new ErrorException("存在已提交过不合格处理的订单");
        }
        //生成分组id
        String groupId = insUnqualifiedHandlerNumberGenerator.generateNumberWithPrefix(6, "GROUP", InsUnqualifiedHandler::getGroupId);
        // 原材料编号切割
        InsOrder order = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery()
                .eq(InsOrder::getId, unqualifiedHandlerDto.getInsOrderId())
                .select(InsOrder::getEntrustCode));
        unqualifiedHandlerDto.setNo(order.getEntrustCode());
        for (Integer selectOrderId : unqualifiedHandlerDto.getSelectOrderIds()) {
            InsUnqualifiedHandler insUnqualifiedHandler = new InsUnqualifiedHandler();
            BeanUtils.copyProperties(unqualifiedHandlerDto, insUnqualifiedHandler);
            Map<String, Object> orderMap = insSampleMapper.selectInsOrder(selectOrderId);
            insUnqualifiedHandler.setNo(orderMap.get("entrustCode").toString());
            insUnqualifiedHandler.setInventoryQuantityId(Integer.valueOf(orderMap.get("inventoryQuantityId").toString()));
            insUnqualifiedHandler.setInsOrderId(selectOrderId);
            insUnqualifiedHandler.setGroupId(groupId);
            insUnqualifiedHandler.setProductionBatch(orderMap.get("updateBatchNo").toString());
            insUnqualifiedHandler.setCargoQuantity(Double.parseDouble(orderMap.get("qtyArrived").toString()));
            insUnqualifiedHandler.setBuyUnitMeas(orderMap.get("buyUnitMeas").toString());
        this.save(unqualifiedHandlerDto);
        if (CollectionUtils.isNotEmpty(unqualifiedHandlerDto.getUnqualifiedHandlerFiles())) {
            for (InsUnqualifiedHandlerFile unqualifiedHandlerFile : unqualifiedHandlerDto.getUnqualifiedHandlerFiles()) {
                unqualifiedHandlerFile.setUnqualifiedId(unqualifiedHandlerDto.getId());
            this.save(insUnqualifiedHandler);
            if (CollectionUtils.isNotEmpty(unqualifiedHandlerDto.getUnqualifiedHandlerFiles())) {
                for (InsUnqualifiedHandlerFile unqualifiedHandlerFile : unqualifiedHandlerDto.getUnqualifiedHandlerFiles()) {
                    unqualifiedHandlerFile.setGroupId(insUnqualifiedHandler.getGroupId());
                }
                insUnqualifiedHandlerFileService.updateBatchById(unqualifiedHandlerDto.getUnqualifiedHandlerFiles());
            }
            insUnqualifiedHandlerFileService.updateBatchById(unqualifiedHandlerDto.getUnqualifiedHandlerFiles());
        }
        return true;
    }
@@ -331,22 +347,21 @@
        BeanUtil.copyProperties(insUnqualifiedHandler, unqualifiedHandlerDto);
        // 查看附件
        List<InsUnqualifiedHandlerFile> list = insUnqualifiedHandlerFileService.list(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
                .eq(InsUnqualifiedHandlerFile::getUnqualifiedId, unqualifiedHandlerDto.getId()));
                .eq(InsUnqualifiedHandlerFile::getGroupId, unqualifiedHandlerDto.getGroupId()));
        unqualifiedHandlerDto.setUnqualifiedHandlerFiles(list);
        return unqualifiedHandlerDto;
    }
    /**
     * 删除不合格
     * @param id
     * @param groupId
     * @return
     */
    @Override
    public boolean deleteUnqualifiedHandler(Integer id) {
    public boolean deleteUnqualifiedHandler(String groupId) {
        insUnqualifiedHandlerFileService.remove(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
                .eq(InsUnqualifiedHandlerFile::getUnqualifiedId, id));
        this.removeById(id);
        return true;
                .eq(InsUnqualifiedHandlerFile::getGroupId, groupId));
        return this.remove(Wrappers.<InsUnqualifiedHandler>lambdaQuery().eq(InsUnqualifiedHandler::getGroupId, groupId));
    }
}
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -618,4 +618,20 @@
        AND io.id = #{id}
        LIMIT 1
    </select>
    <select id="selectOrderInfoByIds" resultType="java.util.Map">
        select
            io.sample_type AS sampleType,
            io.part_detail AS partDetail,
            GROUP_CONCAT(iiq.update_batch_no SEPARATOR '、') AS updateBatchNo,
            SUM(iiq.pur_qty_in_store) AS qtyArrived,
            iiq.buy_unit_meas AS buyUnitMeas,
            iiq.supplier_name AS supplierName,
            DATE_FORMAT(io.send_time,'%Y-%m-%d') AS sendTime
        from ins_order io left join ifs_inventory_quantity iiq on io.ifs_inventory_id=iiq.id
        where io.state !=-1
          AND io.id in
        <foreach collection="selectOrderIds" separator="," item="id" open="(" close=")">
            #{id}
        </foreach>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsSampleMapper.xml
@@ -486,7 +486,7 @@
               ifs.supplier_id     AS supplierId,
               ifs.supplier_name   AS supplierName,
               ifs.part_no         AS partNo,
               ifs.qty_arrived     AS qtyArrived,
               ifs.pur_qty_in_store     AS qtyArrived,
               ifs.receiver_date   AS receiverDate,
               ifs.update_batch_no AS updateBatchNo,
               ifs.part_desc       AS partDesc,
@@ -496,7 +496,8 @@
               ifs.buy_unit_meas      buyUnitMeas,
               io.test_quantity       testQuantity,
               ifs.buy_unit_meas      buyUnitMeas,
               ifs.declare_date       declareDate
               ifs.declare_date       declareDate,
               io.entrust_code AS entrustCode
        FROM ifs_inventory_quantity ifs
                 LEFT JOIN ins_order io ON ifs.id = io.ifs_inventory_id
        WHERE io.id = #{id}
inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml
@@ -95,6 +95,7 @@
                iuh.headline,
                iuh.ins_order_id,
                iuh.is_old_data,
                iuh.group_id,
                coa.operation
            from
                ins_unqualified_handler iuh
@@ -163,4 +164,34 @@
        and operation != '抄送'
        group by co.node_name
    </select>
    <select id="findByGroupId" resultType="com.ruoyi.inspect.vo.UnqualifiedHandlerVO">
        select
            iuh.id as handler_id,
            iuh.no,
            iuh.headline,
            iuh.material_name,
            GROUP_CONCAT(iuh.production_batch SEPARATOR '、') AS production_batch,
            SUM(iuh.cargo_quantity) AS cargo_quantity,
            iuh.buy_unit_meas,
            iuh.specs_models,
            iiq.supplier_name,
            iuh.inspect_time,
            iuh.feedback_user,
            iuh.feedback_time,
            iuh.classification,
            iuh.off_grade_ascription,
            iuh.unqualified_desc,
            iuh.inventory_quantity_id,
            iuh.request_id,
            iuh.oa_state,
            iuh.file_url,
            iuh.group_id
        from
            ins_unqualified_handler iuh
        inner join
            ifs_inventory_quantity iiq on iuh.inventory_quantity_id = iiq.id
        where iuh.group_id=#{groupId}
        group by iuh.group_id
            limit 1
    </select>
</mapper>
ruoyi-admin-ztns/src/main/resources/application-druid.yml
@@ -131,8 +131,7 @@
oa:
    oaHost:
    prodIp:
    unqualifiedProcessId: 1
    unqualifiedProcessIdByKJNS: 2 #KJNS域OA流程id
    unqualifiedProcessId: 1 #OA流程id
# 人事系统
personnel:
ruoyi-admin-ztns/src/main/resources/application-ztns.yml
@@ -132,8 +132,7 @@
oa:
  oaHost: http://192.168.0.49:8000/oa_workflowrequest.asmx?wsdl
  prodIp: http://192.168.21.53:7002/lims
  unqualifiedProcessId: 898113 #ZTNS域OA流程id
  unqualifiedProcessIdByKJNS: 898113 #KJNS域OA流程id
  unqualifiedProcessId: 898113 #OA流程id
# 企业微信推送
wechat:
ruoyi-common/src/main/java/com/ruoyi/common/oa/OAProperty.java
@@ -23,14 +23,9 @@
    private String prodIp;
    /**
     * 中天耐丝:不合格审批oa的id
     * 不合格审批oa的id
     */
    private String unqualifiedProcessId;
    /**
     * 中天科技:不合格审批oa的id
     */
    private String unqualifiedProcessIdByKJNS;
}