不合格管理:新增OA审核状态、物料属性,时间区间字段;以及导出功能
已添加1个文件
已修改10个文件
293 ■■■■■ 文件已修改
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnqualifiedHandlerDto.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/excel/InsUnqualifiedHandlerExcelData.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedHandlerMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedHandlerService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/UnqualifiedHandlerVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-ztns/src/main/resources/application-ztns.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java
@@ -127,7 +127,6 @@
        return Result.success(unqualifiedHandlerService.deleteUnqualifiedHandler(id));
    }
    @ApiOperation(value = "下载附件")
    @GetMapping("/downFile")
    public Result<?> oaDownFile(Integer id) {
@@ -138,4 +137,11 @@
        return Result.success(map);
    }
    @ApiOperation(value = "导出不合格处理记录")
    @GetMapping("/exportUnqualifiedHandler")
    public void exportUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto,HttpServletResponse response) {
        unqualifiedHandlerService.exportUnqualifiedHandler(unqualifiedHandlerDto,response);
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnqualifiedHandlerDto.java
@@ -8,6 +8,7 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@@ -16,6 +17,9 @@
    @ApiModelProperty("域")
    private String contract;
    @ApiModelProperty("OA流程状态")
    private String operation;
    @ApiModelProperty("订单号")
    private String orderNo;
@@ -114,7 +118,6 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime invalidDate;
    @ApiModelProperty("审批日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime approvedDate;
@@ -131,7 +134,6 @@
    @ApiModelProperty("采购单位")
    private String buyUnitMeas;
    private Integer isSource;
    private Integer number;
@@ -142,10 +144,25 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime receiverDate;
    @ApiModelProperty("附件列表")
    private List<InsUnqualifiedHandlerFile> unqualifiedHandlerFiles;
    /**
     * åé¦ˆå¼€å§‹æ—¥æœŸ
     */
    @ApiModelProperty(value = "反馈开始日期")
    private String feedbackStartTime;
    /**
     * åé¦ˆç»“束日期
     */
    @ApiModelProperty(value = "反馈结束日期")
    private String feedbackEndTime;
    /**
     * ç‰©æ–™å±žæ€§
     */
    @ApiModelProperty(value = "物料属性")
    private String materialProp;
}
inspect-server/src/main/java/com/ruoyi/inspect/excel/InsUnqualifiedHandlerExcelData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.inspect.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDate;
@Data
public class InsUnqualifiedHandlerExcelData {
    @ExcelProperty("域")
    private String contract;
    @ExcelProperty(value = "编号")
    private String no;
    @ExcelProperty("OA流程状态")
    private String operation;
    @ExcelProperty("订单号")
    private String orderNo;
    @ExcelProperty("零件号")
    private String partNo;
    @ExcelProperty("零件描述")
    private String partDesc;
    @ExcelProperty("物料属性")
    private String materialProp;
    @ExcelProperty(value = "物料名称")
    private String materialName;
    @ExcelProperty(value = "生产批次")
    private String productionBatch;
    @ExcelProperty(value = "到货数量")
    private String cargoQuantity;
    @ExcelProperty(value = "规格型号")
    private String specsModels;
    @ExcelProperty(value = "报检日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate inspectTime;
    @ExcelProperty(value = "反馈人")
    private String feedbackUser;
    @ExcelProperty(value = "反馈日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate feedbackTime;
    @ExcelProperty(value = "分类")
    private String classification;
    @ExcelProperty(value = "不合格归属")
    private String offGradeAscription;
    @ExcelProperty(value = "不合格描述")
    private String unqualifiedDesc;
    @ExcelProperty("供应商名称")
    private String supplierName;
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedHandlerMapper.java
@@ -10,6 +10,7 @@
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.util.List;
/**
@@ -21,7 +22,7 @@
@Mapper
public interface InsUnqualifiedHandlerMapper extends BaseMapper<InsUnqualifiedHandler> {
    IPage<UnqualifiedHandlerVO> selectPageList(IPage<UnqualifiedHandlerVO> page, @Param("ew")QueryWrapper<UnqualifiedHandlerDto> ew);
    IPage<UnqualifiedHandlerVO> selectPageList(IPage<UnqualifiedHandlerVO> page, @Param("ew")QueryWrapper<UnqualifiedHandlerDto> ew, @Param("feedbackStartDate") String feedbackStartDate,@Param("feedbackEndDate") String feedbackEndDate);
    UnqualifiedHandlerVO findById(@Param("id") Long id);
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedHandlerService.java
@@ -11,6 +11,7 @@
import com.ruoyi.inspect.pojo.InsUnqualifiedHandler;
import com.ruoyi.inspect.vo.UnqualifiedHandlerVO;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -36,4 +37,7 @@
    UnqualifiedHandlerDto getUnqualifiedHandler(Integer id);
    boolean deleteUnqualifiedHandler(Integer id);
    void exportUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto, HttpServletResponse response);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -1745,6 +1745,22 @@
    }
    /**
     * ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŽ»é™¤å­—ç¬¦ä¸²æœ€åŽä¸€ä¸ª"-"及其后面的所有内容
     * @param str å¾…处理的字符串(允许为null)
     * @return å¤„理后的字符串,null返回null,无"-"返回原字符串
     */
    public static String removeLastHyphenAndContent(String str) {
        // ç©ºå€¼æ ¡éªŒï¼šé¿å…NullPointerException
        if (str == null || str.isEmpty()) {
            return str;
        }
        // æ­£åˆ™è¡¨è¾¾å¼ï¼šåŒ¹é…æœ€åŽä¸€ä¸ª"-"及其后面的所有内容
        String regex = "-[^-]*$";
        // æ›¿æ¢åŒ¹é…çš„内容为空字符串
        return str.replaceAll(regex, "");
    }
    /**
     * å°æŠ¥å‘Šç”Ÿæˆ
     *
     * @param orderId
@@ -1767,7 +1783,7 @@
        IfsPartPropsRecord ifsPartPropsRecord = ifsPartPropsRecordMapper.selectOne(Wrappers.<IfsPartPropsRecord>lambdaQuery()
                .eq(IfsPartPropsRecord::getIfsInventoryId, ifsInventoryQuantity.getId()));
        if (Objects.nonNull(ifsPartPropsRecord)) {
            enterFactoryReport.setOuterColor(ifsPartPropsRecord.getOuterColor());
            enterFactoryReport.setOuterColor(StringUtils.equals(ifsPartPropsRecord.getOuterColor(),"/")?ifsPartPropsRecord.getInsulationColor():ifsPartPropsRecord.getOuterColor());
        }
        enterFactoryReport.setQtyArrived(ifsInventoryQuantity.getQtyArrived() == null ? "" :
                ifsInventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + ifsInventoryQuantity.getBuyUnitMeas());
@@ -1812,7 +1828,7 @@
            //查询检验单消息
            InsSampleUserVO insSampleUser = insSampleUserMapper.selectUserNameByOrderId(orderId);
            if (Objects.nonNull(insSampleUser)) {
                enterFactoryReport.setPartDesc(insSampleUser.getModel());
                enterFactoryReport.setPartDesc(removeLastHyphenAndContent(insSampleUser.getModel()));
                enterFactoryReport.setInspector(insSampleUser.getInspector());
                enterFactoryReport.setInspectDate(insSampleUser.getInspectDate());
            }
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java
@@ -1,6 +1,10 @@
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.IoUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -10,6 +14,7 @@
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.core.domain.entity.SysDictData;
import com.ruoyi.common.oa.OAProcess;
import com.ruoyi.common.oa.OAProperty;
import com.ruoyi.common.oa.OAResult;
@@ -18,6 +23,7 @@
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.InsUnqualifiedHandlerMapper;
import com.ruoyi.inspect.pojo.CommonOa;
@@ -29,18 +35,27 @@
import com.ruoyi.inspect.service.InsUnqualifiedHandlerService;
import com.ruoyi.inspect.vo.UnqualifiedHandlerVO;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysDictTypeService;
import com.ruoyi.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @author 27233
@@ -60,11 +75,61 @@
    private InsUnqualifiedHandlerFileService insUnqualifiedHandlerFileService;
    @Resource
    private InsOrderMapper insOrderMapper;
    @Resource
    private ISysDictTypeService sysDictTypeService;
    @Override
    public IPage<UnqualifiedHandlerVO> pageList(Page page, UnqualifiedHandlerDto unqualifiedHandlerDto) {
        return baseMapper.selectPageList(page, QueryWrappers.queryWrappers(unqualifiedHandlerDto));
        String feedbackStartDate = unqualifiedHandlerDto.getFeedbackStartTime();
        String feedbackEndDate = unqualifiedHandlerDto.getFeedbackEndTime();
        unqualifiedHandlerDto.setFeedbackStartTime(null);
        unqualifiedHandlerDto.setFeedbackEndTime(null);
        return baseMapper.selectPageList(page, QueryWrappers.queryWrappers(unqualifiedHandlerDto),feedbackStartDate,feedbackEndDate);
    }
    @Override
    public void exportUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto, HttpServletResponse response) {
        response.reset();
        try{
            //查询字典
            List<SysDictData> materialPropType = sysDictTypeService.selectDictDataByType("material_prop_type");
            //查询不合格处理记录
            IPage<UnqualifiedHandlerVO> pageList = pageList(new Page<>(-1, -1), unqualifiedHandlerDto);
            List<InsUnqualifiedHandlerExcelData> records = pageList.getRecords().stream().map(m->{
                InsUnqualifiedHandlerExcelData handlerExcelData = new InsUnqualifiedHandlerExcelData();
                BeanUtil.copyProperties(m,handlerExcelData);
                handlerExcelData.setMaterialProp(materialPropType.stream().filter(f-> StringUtils.equals(f.getDictValue(),handlerExcelData.getMaterialProp())).findFirst().orElse(new SysDictData()).getDictLabel());
                if(StringUtils.equals(handlerExcelData.getClassification(),"0")){
                    handlerExcelData.setClassification("一类不合格");
                }else if(StringUtils.equals(handlerExcelData.getClassification(),"1")){
                    handlerExcelData.setClassification("二类不合格");
                }
                if(StringUtils.equals(handlerExcelData.getOffGradeAscription(),"0")){
                    handlerExcelData.setOffGradeAscription("生产反馈不合格");
                }else if(StringUtils.equals(handlerExcelData.getOffGradeAscription(),"1")){
                    handlerExcelData.setOffGradeAscription("检测不合格");
                }
                return handlerExcelData;
            }).collect(Collectors.toList());
            //设置response
            String fileName = "不合格处理记录" + ExcelTypeEnum.XLSX.getValue();
            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");
            //导出
            EasyExcel.write(response.getOutputStream(), InsUnqualifiedHandlerExcelData.class)
                    .sheet()
                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                    .doWrite(records);
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException("不合格处理记录导出失败");
        }
    }
    @Override
inspect-server/src/main/java/com/ruoyi/inspect/vo/UnqualifiedHandlerVO.java
@@ -17,6 +17,9 @@
    @ApiModelProperty("域")
    private String contract;
    @ApiModelProperty("物料属性")
    private String materialProp;
    @ApiModelProperty("订单号")
    private String orderNo;
@@ -144,6 +147,8 @@
    @ApiModelProperty("拆分数量")
    private Integer number;
    @ApiModelProperty("OA流程状态")
    private String operation;
    /**
     * æ£€éªŒçŠ¶æ€
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -509,8 +509,68 @@
              group by io.id) a
    </select>
    <select id="selectOrderInfoById" resultType="com.ruoyi.inspect.vo.IfsOrderVO">
        select  io.*,
                iiq.contract,
        select
                io.id,
                io.entrust_code,
                io.custom,
                io.company,
                io.code,
                io.type,
                io.appointed,
                io.state,
                io.tell,
                io.remark,
                io.remark_en,
                io.otc_code,
                io.user_id,
                io.mating,
                io.create_user,
                io.create_time,
                io.update_user,
                io.update_time,
                io.send_time,
                io.ins_state,
                io.factory,
                io.laboratory,
                io.sample_type,
                io.sample,
                io.ins_result,
                io.ins_time,
                io.processing,
                io.is_leave,
                io.order_type,
                io.send,
                io.form_type,
                io.phone,
                io.examine_time,
                io.engineering,
                io.engineering_en,
                io.production,
                io.production_en,
                io.company_id,
                io.prepare_user_id,
                io.prepare_user,
                io.prepare_user_en,
                io.prepare_code,
                io.out_entrust_code,
                io.is_revocation,
                io.revocation_ins_product_ids,
                io.type_source,
                io.ifs_inventory_id,
                io.test_quantity,
                io.part_detail,
                io.is_exemption,
                io.temperature,
                io.humidity,
                io.sample_status,
                io.quarter_item_id,
                io.sample_view,
                io.sample_view_en,
                io.is_first_submit,
                io.first_submit_date,
                io.update_batch_no,
                io.part_desc,
                io.supplier_name,
                iiq.is_split_order,
                iiq.order_type AS ifs_order_type,
                iiq.part_no,
@@ -532,6 +592,10 @@
                    when ipps.lettering_info is not null and ipps.lettering_info!='' then ipps.lettering_info
                    else isor.lettering_info
                    end AS lettering_info,
                case
                    when io.ifs_inventory_id is not null and io.ifs_inventory_id!='' then iiq.contract
                    else io.contract
                    end AS contract,
                ipps.start_meter_mark,
                ipps.end_meter_mark
        from ins_order io left join ifs_inventory_quantity iiq on io.ifs_inventory_id=iiq.id
inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml
@@ -12,7 +12,10 @@
        unqualified_desc,inventory_quantity_id
    </sql>
    <select id="selectPageList" resultType="com.ruoyi.inspect.vo.UnqualifiedHandlerVO">
        select * from (select
        select
            *
        from (
            select
            iiq.*,
            iuh.id as handler_id,
            iuh.no,
@@ -30,13 +33,27 @@
            iuh.oa_state,
            iuh.request_id,
            iuh.file_url,
            iuh.headline
                iuh.headline,
                coa.operation
        from
            ins_unqualified_handler iuh
        inner join
            ifs_inventory_quantity iiq
        on
            iuh.inventory_quantity_id = iiq.id)tempA
                iuh.inventory_quantity_id = iiq.id
            LEFT JOIN (
            SELECT
            *,
            ROW_NUMBER() OVER (PARTITION BY workflow_id ORDER BY approval_time DESC, id DESC) AS rn
            FROM
            common_oa
            ) AS coa ON iuh.request_id = coa.workflow_id AND coa.rn = 1
        )tempA
        <where>
            <if test="feedbackStartDate!=null and feedbackEndDate !=null">
                AND feedback_time between #{feedbackStartDate} AND #{feedbackEndDate}
            </if>
        </where>
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
ruoyi-admin-ztns/src/main/resources/application-ztns.yml
@@ -179,11 +179,11 @@
    - contract: ZTNS
      ip: http://10.1.51.128
      user: lims
      password: qCzOMJlqE8TYOHDWGva/Tw==
      password: q1CItm6Zl7P4SQkfczu/oQ==
    - contract: KJNS
      ip: http://10.1.203.177
      user: lims
      password: qCzOMJlqE8TYOHDWGva/Tw==
      password: q1CItm6Zl7P4SQkfczu/oQ==
# å¤‡æ³¨ 18083密码:zttZTT123!@
mqtt: