已添加1个文件
已修改12个文件
910 ■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/controller/StandardTreeController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsPartPropsRecordController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsPartPropsRecordServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml 492 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/controller/StandardTreeController.java
@@ -94,6 +94,12 @@
        return Result.success(standardProductListService.selectStandardProductListByMethodId(id, tree));
    }
    @ApiOperation(value = "通过检验标准查询检验项目")
    @GetMapping("/buildStandardProductListNoDrag")
    public Result selectStandardProductListByMethodId1(Integer id, String tree) {
        return Result.success(standardProductListService.buildStandardProductListNoDrag(id, tree));
    }
    @ApiOperation(value = "批量查询检验项目")
    @GetMapping("/selectStandardProductByMethodId")
    public Result selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items) {
basic-server/src/main/java/com/ruoyi/basic/service/StandardProductListService.java
@@ -24,6 +24,8 @@
    Map<String, Object> selectStandardProductListByMethodId(Integer id, String tree);
    Map<String, Object> buildStandardProductListNoDrag(Integer id, String tree);
    IPage<StandardProductList> selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items);
    Map<String, List<?>> selectStandardProductEnumByMethodId(Integer id, String tree, String item);
@@ -32,18 +34,21 @@
    /**
     * æ ‡å‡†åº“拖拽
     *
     * @param resetTreeDragDTO
     */
    void resetTreeDrag(ResetTreeDragDTO resetTreeDragDTO);
    /**
     * æ ‡å‡†åº“拖拽
     *
     * @param standardProductLists
     */
    void resetTreeDragBatch(List<StandardProductList> standardProductLists);
    /**
     * æ£€éªŒé¡¹è¦æ±‚值对比
     *
     * @param copyStandardProductListDto
     * @return
     */
@@ -51,6 +56,7 @@
    /**
     * æ£€éªŒé¡¹è¦æ±‚值对比一个
     *
     * @param copyStandardProductListDto
     * @return
     */
@@ -58,6 +64,7 @@
    /**
     * æ£€éªŒé¡¹å¤åˆ¶æŽ’序
     *
     * @param copyStandardProductListDto
     * @return
     */
basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
@@ -189,16 +189,15 @@
    }
    /**
     *
     * @param str                 åˆ¤å®šå…¬å¼
     * @param model               åž‹å·
     * @param standardCores       èŠ¯æ•°
     * @param conductorMaterial   å¯¼ä½“材质
     * @param conductorType       å¯¼ä½“类型
     * @param str               åˆ¤å®šå…¬å¼
     * @param model             åž‹å·
     * @param standardCores     èŠ¯æ•°
     * @param conductorMaterial å¯¼ä½“材质
     * @param conductorType     å¯¼ä½“类型
     * @param insSample
     * @return
     */
    private boolean getIsIf(String str, String model, String standardCores, String conductorMaterial, String conductorType,InsSampleReceiveDto insSample) {
    private boolean getIsIf(String str, String model, String standardCores, String conductorMaterial, String conductorType, InsSampleReceiveDto insSample) {
        Matcher matcher = Pattern.compile("\\d+(\\.\\d+)?").matcher(model);
        String model2 = "";
        while (matcher.find()) {
@@ -452,11 +451,225 @@
                return Integer.compare(num1, num2);
            }
        });
          // æŒ‰ç…§ç´¢å¼•排序
        // æŒ‰ç…§ç´¢å¼•排序
        if (isDrag) {
            list.sort((o1, o2) -> (o1.getSort() == null ? 0 : o1.getSort())
                    - (o2.getSort() == null ? 0 : o2.getSort()));
            list.sort(Comparator.comparingInt(o -> (o.getSort() == null ? 0 : o.getSort())));
        }
        Map<String, Object> map = new HashMap<>();
        map.put("productList", list);
        map.put("total", list.size());
        return map;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Map<String, Object> buildStandardProductListNoDrag(Integer id, String tree) {
        String[] trees = tree.split(" - ");
        List<StandardProductList> list = new ArrayList<>();
        if (trees.length == 3) {
            List<StandardTree> treeList = new ArrayList<>();
            StandardTree standardTree = new StandardTree();
            standardTree.setFactory(trees[0]);
            standardTree.setLaboratory(trees[1]);
            standardTree.setSampleType(trees[2]);
            List<ProductDto> pList = standardTreeMapper.selectPList(trees[2]);
            if (CollectionUtils.isEmpty(pList) || pList.get(0) == null) {
                List<StandardTree> treeList1 =
                        standardTreeMapper.selectList(
                                Wrappers.<StandardTree>lambdaQuery()
                                        .eq(StandardTree::getLaboratory, trees[1])
                                        .eq(StandardTree::getSampleType, trees[2])
                        );
                if (CollectionUtils.isEmpty(treeList1)) {
                    treeList.add(standardTree);
                } else {
                    treeList.addAll(treeList1);
                }
            } else {
                for (ProductDto p : pList) {
                    standardTree.setSample(p.getName());
                    List<StandardTree> treeList1 =
                            standardTreeMapper.selectList(
                                    Wrappers.<StandardTree>lambdaQuery()
                                            .eq(StandardTree::getLaboratory, trees[1])
                                            .eq(StandardTree::getSampleType, trees[2])
                                            .eq(StandardTree::getSample, p.getName())
                            );
                    if (CollectionUtils.isEmpty(treeList1)) {
                        treeList.add(JSON.parseObject(
                                JSON.toJSONString(standardTree),
                                StandardTree.class
                        ));
                    } else {
                        treeList.addAll(treeList1);
                    }
                }
            }
            for (StandardTree st : treeList) {
                String tree2 = trees[0] + " - " + trees[1] + " - " + trees[2]
                        + " - " + st.getSample() + " - " + st.getModel();
                list.addAll(
                        standardTreeMapper.selectStandardProductListByTree(
                                "\"" + trees[2] + "\"",
                                st.getSample(),
                                st.getModel(),
                                tree2,
                                trees[1]
                        )
                );
                list.addAll(
                        standardTreeMapper.selectStandardProductListByTree2(
                                "\"" + trees[2] + "\",\"" + st.getSample() + "\"",
                                st.getSample(),
                                st.getModel(),
                                tree2,
                                trees[1]
                        )
                );
            }
        } else if (trees.length == 4) {
            List<StandardTree> treeList =
                    standardTreeMapper.selectList(
                            Wrappers.<StandardTree>lambdaQuery()
                                    .eq(StandardTree::getLaboratory, trees[1])
                                    .eq(StandardTree::getSampleType, trees[2])
                                    .eq(StandardTree::getSample, trees[3])
                    );
            if (CollectionUtils.isEmpty(treeList)) {
                StandardTree st = new StandardTree();
                st.setFactory(trees[0]);
                st.setLaboratory(trees[1]);
                st.setSampleType(trees[2]);
                st.setSample(trees[3]);
                treeList.add(st);
            }
            for (StandardTree st : treeList) {
                String str = tree + " - " + st.getModel();
                list.addAll(
                        standardTreeMapper.selectStandardProductListByTree(
                                "\"" + trees[2] + "\"",
                                st.getSample(),
                                st.getModel(),
                                str,
                                trees[1]
                        )
                );
                list.addAll(
                        standardTreeMapper.selectStandardProductListByTree2(
                                "\"" + trees[2] + "\",\"" + trees[3] + "\"",
                                st.getSample(),
                                st.getModel(),
                                str,
                                trees[1]
                        )
                );
            }
        } else {
            list.addAll(
                    standardTreeMapper.selectStandardProductListByTree(
                            "\"" + trees[2] + "\"",
                            "null".equals(trees[3]) ? null : trees[3],
                            trees[4],
                            tree,
                            trees[1]
                    )
            );
            list.addAll(
                    standardTreeMapper.selectStandardProductListByTree2(
                            "\"" + trees[2] + "\",\"" + trees[3] + "\"",
                            "null".equals(trees[3]) ? null : trees[3],
                            trees[4],
                            tree,
                            trees[1]
                    )
            );
        }
        for (StandardProductList p : list) {
            p.setId(IdWorker.getId());
        }
        List<StandardProductList> oldList =
                standardProductListMapper.selectList(
                        Wrappers.<StandardProductList>lambdaQuery()
                                .eq(StandardProductList::getStandardMethodListId, id)
                                .like(StandardProductList::getTree, tree)
                );
        for (StandardProductList old : oldList) {
            for (StandardProductList cur : list) {
                // åŠå¾„只有一个值,自动赋值
                String radiusList = cur.getRadiusList();
                if (StringUtils.isNotBlank(radiusList)
                        && !"null".equals(radiusList)
                        && !"\"\"".equals(radiusList)) {
                    JSONArray jsonArray = JSON.parseArray(radiusList);
                    List<String> radius = jsonArray.toJavaList(String.class);
                    if (CollectionUtils.isNotEmpty(radius) && radius.size() == 1) {
                        cur.setRadius(radius.get(0));
                    }
                }
                if (Objects.equals(old.getInspectionItem(), cur.getInspectionItem())
                        && Objects.equals(
                        Objects.toString(old.getInspectionItemSubclass(), ""),
                        Objects.toString(cur.getInspectionItemSubclass(), "")
                )
                        && Objects.equals(old.getModel(), cur.getModel())
                        && old.getTree().contains(
                        cur.getSample() == null ? "null" : cur.getSample()
                )
                        && Objects.equals(
                        old.getStructureItemParameterId(),
                        cur.getStructureItemParameterId()
                )) {
                    cur.setId(old.getId());
                    cur.setSort(old.getSort());
                    cur.setState(old.getState());
                    cur.setMethod(old.getMethodS());
                    cur.setRadius(old.getRadius());
                    cur.setRates(old.getRates());
                    cur.setAsk(old.getAsk());
                    cur.setTell(old.getTell());
                    cur.setPrice(old.getPrice());
                    cur.setManHour(old.getManHour());
                    cur.setSection(old.getSection());
                    cur.setCores(old.getCores());
                    cur.setConductorMaterial(old.getConductorMaterial());
                    cur.setConductorType(old.getConductorType());
                    cur.setTemplateId(old.getTemplateId());
                    break;
                }
            }
        }
        list.sort((o1, o2) -> {
            String f1 = o1.getManHourGroup();
            String f2 = o2.getManHourGroup();
            boolean e1 = StringUtils.isBlank(f1);
            boolean e2 = StringUtils.isBlank(f2);
            if (e1 && e2) return 0;
            if (e1) return 1;
            if (e2) return -1;
            return Integer.compare(
                    extractNumber(f1),
                    extractNumber(f2)
            );
        });
        Map<String, Object> map = new HashMap<>();
        map.put("productList", list);
@@ -508,6 +721,7 @@
    /**
     * ä¿®æ”¹æ ‡å‡†åº“区间
     *
     * @param list
     * @return
     */
@@ -520,6 +734,7 @@
    /**
     * æ ‡å‡†åº“拖拽
     *
     * @param resetTreeDragDTO
     */
    @Override
@@ -538,7 +753,7 @@
                    resetTreeDragDTO.getTree());
            // ä»Žä¸‹å¾€ä¸Š
        } else if (beginIndex > endIndex){
        } else if (beginIndex > endIndex) {
            standardProductListMapper.updateSortDown(beginIndex,
                    endIndex,
                    methodId,
@@ -559,6 +774,7 @@
    /**
     * æ£€éªŒé¡¹è¦æ±‚值对比
     *
     * @param copyDto
     * @return
     */
@@ -602,6 +818,7 @@
    /**
     * æ£€éªŒé¡¹å¤åˆ¶å¯¹æ¯”一个
     *
     * @param dto
     * @return
     */
@@ -636,6 +853,7 @@
    /**
     * æ£€éªŒé¡¹å¤åˆ¶æŽ’序
     *
     * @param copyDto
     * @return
     */
inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
@@ -25,30 +25,44 @@
    private DataAnalysisService dataAnalysisService;
    /**
     * æŸ¥è¯¢åŽŸææ–™æŸ±çŠ¶ç»Ÿè®¡
     * æŸ¥è¯¢ç‰©æ–™å±žæ€§æŸ±çŠ¶ç»Ÿè®¡
     *
     * @param dataAnalysisDto
     * @return
     */
    @ApiOperation(value = "查询原材料柱状统计")
    @ApiOperation(value = "查询物料属性柱状统计")
    @GetMapping("/getRawPassRateByBarChart")
    public Result getRawPassRateByBarChart(DataAnalysisDto dataAnalysisDto) {
        return Result.success(dataAnalysisService.getRawPassRateByBarChart(dataAnalysisDto));
    }
    /**
     * æŸ¥è¯¢åŽŸææ–™æŸ±çŠ¶ç»Ÿè®¡
     * æŸ¥è¯¢ç‰©æ–™å±žæ€§æŸ±çŠ¶ç»Ÿè®¡
     *
     * @param dataAnalysisDto
     * @return
     */
    @ApiOperation(value = "查询原材料合格率饼状态")
    @ApiOperation(value = "查询物料属性合格率饼状图")
    @GetMapping("/getRawPassRateByCake")
    public Result getRawPassRateByCake(DataAnalysisDto dataAnalysisDto) {
        return Result.success(dataAnalysisService.getRawPassRateByCake(dataAnalysisDto));
    }
    /**
     * æŸ¥è¯¢ç‰©æ–™å±žæ€§åˆæ ¼çŽ‡è¡¨æ ¼
     *
     * @param dataAnalysisDto
     * @return
     */
    @ApiOperation(value = "查询物料属性合格率表格")
    @GetMapping("/getMaterialPropTable")
    public Result getMaterialPropTable(DataAnalysisDto dataAnalysisDto) {
        return Result.success(dataAnalysisService.getMaterialPropTable(dataAnalysisDto));
    }
    /**
     * æŸ¥è¯¢åŽŸææ–™é¡¹
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -60,6 +74,7 @@
    /**
     * æŸ¥è¯¢åŽŸææ–™é¡¹æ£€åˆ†æž
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -71,6 +86,7 @@
    /**
     * æŸ¥è¯¢åŽŸææ–™é¡¹æ£€åˆ†æžåˆ—è¡¨
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -82,6 +98,7 @@
    /**
     * æŸ¥è¯¢åŽŸææ–™é¡¹æ£€åˆ†æžåˆ—è¡¨
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -93,6 +110,7 @@
    /**
     * æŸ¥è¯¢åŽŸææ–™é¡¹æ£€å’ŒåŽ‚å®¶æ•°æ®å¯¹æ¯”
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -104,6 +122,7 @@
    /**
     * æŸ¥è¯¢æœ¬æœˆä¸Žä¸Šä¸ªæœˆåˆæ ¼çŽ‡å¯¹æ¯”
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -115,6 +134,7 @@
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹ç±»åž‹é¥¼å›¾
     *
     * @param dataAnalysisDto
     * @return
     */
inspect-server/src/main/java/com/ruoyi/inspect/controller/IfsPartPropsRecordController.java
@@ -2,7 +2,6 @@
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.inspect.dto.IfsPartPropsRecordDTO;
import com.ruoyi.inspect.pojo.IfsPartPropsRecord;
import com.ruoyi.inspect.service.IfsPartPropsRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java
@@ -36,6 +36,9 @@
    @ApiModelProperty("分组类型, 0: é»˜è®¤æŒ‰ç…§æ ·å“åŒºåˆ† 1: åŒä¸€åނ家, åŒä¸€åž‹å·, ä¸åŒæ‰¹æ¬¡, 2 : åŒä¸€åž‹å·, ä¸åŒåނ家")
    private String groupType;
    @ApiModelProperty("物料属性")
    private String materialProp;
    @ApiModelProperty("选择的检验项名称")
    private List<String> itemNames;
inspect-server/src/main/java/com/ruoyi/inspect/dto/MaterialPropTableDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class MaterialPropTableDTO {
    @ApiModelProperty(value = "修改后批次号")
    private String updateBatchNo;
    @ApiModelProperty(value = "抵达的采购数量")
    private BigDecimal qtyArrived;
    @ApiModelProperty(value = "零件描述")
    private String partDesc;
    @ApiModelProperty(value = "合格状态")
    private Integer inspectStatus;
    @ApiModelProperty(value = "下发时间")
    private Date sendTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
@@ -2,6 +2,7 @@
import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
import com.ruoyi.inspect.dto.DataAnalysisDto;
import com.ruoyi.inspect.dto.MaterialPropTableDTO;
import com.ruoyi.inspect.vo.RawMaterialSupplierVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -19,32 +20,39 @@
public interface DataAnalysisMapper {
    /**
     * èŽ·å–æœ¬å‘¨çš„åŽŸææ–™ä¿¡æ¯
     * èŽ·å–æœ¬å‘¨çš„ç‰©æ–™å±žæ€§ä¿¡æ¯
     *
     * @return
     */
    List<Map<String, Object>> getRawPassRateByBarChartByWeek(@Param("dto") DataAnalysisDto dataAnalysisDto);
    /**
     * èŽ·å–æœ¬æœˆçš„åŽŸææ–™ä¿¡æ¯
     * èŽ·å–æœ¬æœˆçš„ç‰©æ–™å±žæ€§ä¿¡æ¯
     *
     * @return
     */
    List<Map<String, Object>> getRawPassRateByBarChartByDay(@Param("dto") DataAnalysisDto dataAnalysisDto);
    /**
     * èŽ·å–æœ¬å¹´çš„åŽŸææ–™ä¿¡æ¯
     * èŽ·å–æœ¬å¹´çš„ç‰©æ–™å±žæ€§ä¿¡æ¯
     *
     * @return
     */
    List<Map<String, Object>> getRawPassRateByBarChartByYear(@Param("dto") DataAnalysisDto dataAnalysisDtor);
    /**
     * æŸ¥çœ‹åŽŸææ–™é¥¼çŠ¶å›¾
     *
     * @return
     */
    Map<String, Object> getRawPassRateByCake(@Param("dto") DataAnalysisDto dataAnalysisDto);
    List<MaterialPropTableDTO> getMaterialPropTable(@Param("dto") DataAnalysisDto dataAnalysisDto);
    /**
     * æŸ¥è¯¢æ£€æµ‹é¡¹é›†åˆ
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -52,6 +60,7 @@
    /**
     * æŸ¥è¯¢æ‰€æœ‰çš„
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -62,12 +71,14 @@
    /**
     * æŸ¥è¯¢æœ¬æœˆä¸Žä¸Šæœˆåˆæ ¼çŽ‡å¯¹æ¯”
     *
     * @return
     */
    List<Map<String, Object>> getRawUpMonth();
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹ç±»åž‹é¥¼å›¾
     *
     * @return
     */
    Map<String, Object> getOrderTypeCookie();
inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java
@@ -3,6 +3,7 @@
import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto;
import com.ruoyi.inspect.dto.DataAnalysisDto;
import com.ruoyi.inspect.dto.MaterialPropTableDTO;
import com.ruoyi.inspect.vo.DeviationAnalyzeVo;
import com.ruoyi.inspect.vo.RawProductAnalysisVo;
@@ -18,18 +19,24 @@
public interface DataAnalysisService {
    /**
     * æŸ¥è¯¢åŽŸææ–™æŸ±çŠ¶ç»Ÿè®¡
     * æŸ¥è¯¢ç‰©æ–™å±žæ€§æŸ±çŠ¶ç»Ÿè®¡
     * @return
     */
    List<Map<String, Object>> getRawPassRateByBarChart(DataAnalysisDto dataAnalysisDto);
    /**
     * æŸ¥è¯¢åŽŸææ–™åˆæ ¼çŽ‡é¥¼çŠ¶å›¾
     * æŸ¥è¯¢ç‰©æ–™å±žæ€§åˆæ ¼çŽ‡é¥¼çŠ¶å›¾
     * @param dataAnalysisDto
     * @return
     */
    Map<String, Object> getRawPassRateByCake(DataAnalysisDto dataAnalysisDto);
    /**
     * æŸ¥è¯¢ç‰©æ–™å±žæ€§åˆæ ¼çŽ‡é¥¼çŠ¶å›¾
     * @param dataAnalysisDto
     * @return
     */
    List<MaterialPropTableDTO> getMaterialPropTable(DataAnalysisDto dataAnalysisDto);
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹åç§°
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java
@@ -9,6 +9,7 @@
import com.ruoyi.common.constant.InsOrderTypeConstants;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.DataAnalysisDto;
import com.ruoyi.inspect.dto.MaterialPropTableDTO;
import com.ruoyi.inspect.dto.SampleProductRawAnalysisDto;
import com.ruoyi.inspect.mapper.DataAnalysisMapper;
import com.ruoyi.inspect.mapper.InsProductMapper;
@@ -43,7 +44,8 @@
    private InsProductMapper insProductMapper;
    /**
     * æŸ¥è¯¢åŽŸææ–™æŸ±çŠ¶ç»Ÿè®¡
     * æŸ¥è¯¢ç‰©æ–™å±žæ€§æŸ±çŠ¶ç»Ÿè®¡
     *
     * @return searchTime  æ—¶é—´
     * @return passRate  åˆæ ¼çއ
     * @return sum  æ€»æ•°
@@ -64,7 +66,8 @@
            DateTime endOfWeek = DateUtil.endOfWeek(now);
            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss"));
            dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss"));
            return dataAnalysisMapper.getRawPassRateByBarChartByWeek(dataAnalysisDto);
            List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByWeek(dataAnalysisDto);
            return maps;
        } else if (dataAnalysisDto.getDateType().equals("2")) {
            // èŽ·å–å½“å‰æœˆçš„å¼€å§‹æ—¶é—´ï¼ˆæ¯æœˆ1号 00:00:00)
            DateTime beginOfMonth = DateUtil.beginOfMonth(now);
@@ -72,7 +75,8 @@
            DateTime endOfMonth = DateUtil.endOfMonth(now);
            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss"));
            dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss"));
            return dataAnalysisMapper.getRawPassRateByBarChartByDay(dataAnalysisDto);
            List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByDay(dataAnalysisDto);
            return maps;
        } else if (dataAnalysisDto.getDateType().equals("3")) {
            // èŽ·å–å½“å‰å¹´çš„å¼€å§‹æ—¶é—´ï¼ˆæ¯å¹´1月1日 00:00:00)
            DateTime beginOfYear = DateUtil.beginOfYear(now);
@@ -80,7 +84,8 @@
            DateTime endOfYear = DateUtil.endOfYear(now);
            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
            dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
            return dataAnalysisMapper.getRawPassRateByBarChartByYear(dataAnalysisDto);
            List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByYear(dataAnalysisDto);
            return maps;
        }
        return null;
@@ -88,9 +93,9 @@
    /**
     * æŸ¥è¯¢åŽŸææ–™é¥¼çŠ¶å›¾
     *
     * @param dataAnalysisDto
     * @return
     * sum          : æ€»æ•°
     * @return sum          : æ€»æ•°
     * unQualified  : ä¸åˆæ ¼æ•°é‡
     * qualified  : åˆæ ¼æ•°é‡
     * passRate  : åˆæ ¼çއ
@@ -125,12 +130,51 @@
            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
            dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
        }
        return dataAnalysisMapper.getRawPassRateByCake(dataAnalysisDto);
        Map<String, Object> rawPassRateByCake = dataAnalysisMapper.getRawPassRateByCake(dataAnalysisDto);
        return rawPassRateByCake;
    }
    @Override
    public List<MaterialPropTableDTO> getMaterialPropTable(DataAnalysisDto dataAnalysisDto) {
        // æ ¼å¼åŒ–字段, é¿å…æŠ¥é”™
        this.formatDataAnalysisDto(dataAnalysisDto);
        // èŽ·å–å½“å‰æ—¥æœŸ
        DateTime now = DateUtil.date();
        if (StrUtil.isNotBlank(dataAnalysisDto.getBeginDate()) && StrUtil.isNotBlank(dataAnalysisDto.getEndDate())) {
        } else if (dataAnalysisDto.getDateType().equals("1")) {
            // èŽ·å–æœ¬å‘¨çš„å¼€å§‹æ—¶é—´ï¼ˆå‘¨ä¸€ 00:00:00)
            DateTime beginOfWeek = DateUtil.beginOfWeek(now);
            // èŽ·å–æœ¬å‘¨çš„ç»“æŸæ—¶é—´ï¼ˆå‘¨æ—¥ 23:59:59)
            DateTime endOfWeek = DateUtil.endOfWeek(now);
            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss"));
            dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss"));
        } else if (dataAnalysisDto.getDateType().equals("2")) {
            // èŽ·å–å½“å‰æœˆçš„å¼€å§‹æ—¶é—´ï¼ˆæ¯æœˆ1号 00:00:00)
            DateTime beginOfMonth = DateUtil.beginOfMonth(now);
            // èŽ·å–å½“å‰æœˆçš„ç»“æŸæ—¶é—´ï¼ˆæœ¬æœˆæœ€åŽä¸€å¤© 23:59:59)
            DateTime endOfMonth = DateUtil.endOfMonth(now);
            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss"));
            dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss"));
        } else if (dataAnalysisDto.getDateType().equals("3")) {
            // èŽ·å–å½“å‰å¹´çš„å¼€å§‹æ—¶é—´ï¼ˆæ¯å¹´1月1日 00:00:00)
            DateTime beginOfYear = DateUtil.beginOfYear(now);
            // èŽ·å–å½“å‰å¹´çš„ç»“æŸæ—¶é—´ï¼ˆæ¯å¹´12月31日 23:59:59)
            DateTime endOfYear = DateUtil.endOfYear(now);
            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
            dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
        }
        List<MaterialPropTableDTO> rawPassRateByCake = dataAnalysisMapper.getMaterialPropTable(dataAnalysisDto);
        return rawPassRateByCake;
    }
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹åç§°
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -151,6 +195,7 @@
    /**
     * æŸ¥è¯¢åŽŸææ–™é¡¹æ£€åˆ†æž
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -202,6 +247,7 @@
    /**
     * æŸ¥è¯¢æ£€æµ‹é¡¹åˆ†æžåˆ—表
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -214,6 +260,7 @@
    /**
     * æŸ¥è¯¢é¡¹æ£€åˆ†æžåˆæ ¼çއ
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -386,6 +433,7 @@
    /**
     * æŸ¥è¯¢æœ¬æœˆä¸Žä¸Šæœˆåˆæ ¼çŽ‡å¯¹æ¯”
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -396,6 +444,7 @@
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹ç±»åž‹é¥¼å›¾
     *
     * @param dataAnalysisDto
     * @return
     */
@@ -406,6 +455,7 @@
    /**
     * è®¡ç®—返回数据
     *
     * @param lastValues
     * @return
     */
@@ -473,6 +523,7 @@
    /**
     * è®¡ç®—极差
     *
     * @param lastValues
     * @return
     */
@@ -509,6 +560,7 @@
    /**
     * è®¡ç®—平均值
     *
     * @param values
     * @return
     */
@@ -531,6 +583,7 @@
    /**
     * è®¡ç®—标准偏差
     *
     * @return
     */
    private static BigDecimal computeStandardDeviation(List<String> lastValues) {
@@ -588,6 +641,7 @@
    /**
     * *****格式化字段****
     *
     * @param dataAnalysisDto
     */
    private void formatDataAnalysisDto(DataAnalysisDto dataAnalysisDto) {
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/IfsPartPropsRecordServiceImpl.java
@@ -1,6 +1,5 @@
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,14 +9,15 @@
import com.ruoyi.common.enums.OrderType;
import com.ruoyi.common.utils.api.IfsApiUtils;
import com.ruoyi.inspect.dto.IfsPartPropsRecordDTO;
import com.ruoyi.inspect.mapper.IfsPartPropsRecordMapper;
import com.ruoyi.inspect.mapper.IfsSplitOrderRecordMapper;
import com.ruoyi.inspect.pojo.IfsPartPropsRecord;
import com.ruoyi.inspect.pojo.IfsSplitOrderRecord;
import com.ruoyi.inspect.service.IfsPartPropsRecordService;
import com.ruoyi.inspect.mapper.IfsPartPropsRecordMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -42,6 +42,9 @@
    @Autowired
    private IfsSplitOrderRecordMapper ifsSplitOrderRecordMapper;
    @Value("${ifs.contract}")
    public String contract;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean saveOrUpdateProps(IfsPartPropsRecordDTO ifsPartPropsRecord) {
@@ -58,7 +61,7 @@
            inAttrMap.put("SYSCODE", "LIMS");
            inAttrMap.put("SYSMODEL", "库存物料批次属性修改");
            HashMap<String, Object> batchInfoMap = new HashMap<>();
            batchInfoMap.put("CONTRACT","ZTNS");//域
            batchInfoMap.put("CONTRACT",contract);//域
            batchInfoMap.put("PART_NO",ifsPartPropsRecord.getPartNo());//零件号
            batchInfoMap.put("LOT_BATCH_NO",ifsPartPropsRecord.getLotBatchNo());//批次号
            batchInfoMap.put("ATTR1",ifsPartPropsRecord.getDrumNo());//载具编号
inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
@@ -1,195 +1,304 @@
<?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.DataAnalysisMapper">
    <!-- èŽ·å–æœ¬å‘¨çš„åŽŸææ–™ä¿¡æ¯ -->
    <!-- èŽ·å–æœ¬å‘¨çš„ç‰©æ–™å±žæ€§ä¿¡æ¯ -->
    <select id="getRawPassRateByBarChartByWeek" resultType="java.util.Map">
        WITH RECURSIVE AllWeeks AS (SELECT 1 AS week
                                     UNION ALL
                                     SELECT week + 1
                                     FROM AllWeeks
                                     WHERE week &lt; 7)
        SELECT COALESCE(sub.sum, 0)      AS sum,
               CASE am.week
                   WHEN 1 THEN '星期日'
                   WHEN 2 THEN '星期一'
                   WHEN 3 THEN '星期二'
                   WHEN 4 THEN '星期三'
                   WHEN 5 THEN '星期四'
                   WHEN 6 THEN '星期五'
                   WHEN 7 THEN '星期六'
                END                   AS searchTime,
               COALESCE(sub.passRate, 0) AS passRate
        WITH RECURSIVE AllWeeks AS (
        SELECT 1 AS week
        UNION ALL
        SELECT week + 1 FROM AllWeeks WHERE week &lt; 7
        )
        SELECT
        COALESCE(sub.qualified, 0) AS qualified,
        COALESCE(sub.unQualified, 0) AS unQualified,
        CASE am.week
        WHEN 1 THEN '星期日'
        WHEN 2 THEN '星期一'
        WHEN 3 THEN '星期二'
        WHEN 4 THEN '星期三'
        WHEN 5 THEN '星期四'
        WHEN 6 THEN '星期五'
        WHEN 7 THEN '星期六'
        END AS searchTime
        FROM AllWeeks am
                 LEFT JOIN (select COUNT(*)                 sum,
                                   DAYOFWEEK(io1.send_time) searchTime,
                                   ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) *
                                         100,
                                         2)                 passRate
                            from ifs_inventory_quantity iiq
                                     LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
                                and io1.order_type = #{dto.orderType}
                                and io1.state != -1
                                     left join (select is2.ins_order_id,
                                                       is2.sample_type,
                                                       is2.model,
                                                       is2.sample
                                                from ins_sample is2
                                                group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
                            where iiq.is_finish = 1
                              and iiq.inspect_status not in (0, 3)
                              and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        <if test="dto.sampleName != null and dto.sampleName != ''">
            and ins.sample like concat('%', #{dto.sampleName}, '%')
        LEFT JOIN (
        SELECT
        DAYOFWEEK(io1.send_time) AS week,
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified
        FROM ifs_inventory_quantity iiq
        INNER JOIN ins_order io1
        ON io1.ifs_inventory_id = iiq.id
        LEFT JOIN (
        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
        FROM ins_sample
        GROUP BY ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1, 2)
        AND io1.order_type = #{dto.orderType}
        AND io1.state != -1
        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
        <if test="dto.materialProp != null and dto.materialProp.trim() != ''">
            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
        </if>
        <if test="dto.modelName != null and dto.modelName != ''">
            and ins.model like concat('%', #{dto.modelName}, '%')
        <if test="dto.sampleName != null and dto.sampleName.trim() != ''">
            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName != ''">
            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
        <if test="dto.modelName != null and dto.modelName.trim() != ''">
            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
        </if>
                            GROUP BY DAYOFWEEK(io1.send_time)
                            having searchTime is not null) sub ON am.week = sub.searchTime
        WHERE am.week BETWEEN 1 AND 7
        <if test="dto.supplierName != null and dto.supplierName.trim() != ''">
            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
        </if>
        GROUP BY DAYOFWEEK(io1.send_time)
        ) sub ON am.week = sub.week
        ORDER BY am.week
    </select>
    <!-- èŽ·å–æœ¬æœˆçš„åŽŸææ–™ä¿¡æ¯ -->
    <!-- èŽ·å–æœ¬æœˆçš„ç‰©æ–™å±žæ€§ä¿¡æ¯ -->
    <!-- èŽ·å–æœ¬æœˆçš„ç‰©æ–™å±žæ€§ä¿¡æ¯ï¼ˆæŒ‰å¤©ï¼Œè¡¥å…¨æ—¥æœŸï¼‰ -->
    <select id="getRawPassRateByBarChartByDay" resultType="java.util.Map">
        select COUNT(*)                         sum,
               DATE_FORMAT(io1.send_time, '%Y-%m-%d') searchTime,
               ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100,
                     2)                         passRate
        from ifs_inventory_quantity iiq
                 LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
            and io1.order_type = #{dto.orderType}
            and io1.state != -1
                 left join (select is2.ins_order_id,
                                   is2.sample_type,
                                   is2.model,
                                   is2.sample
                            from ins_sample is2
                            group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
        where iiq.is_finish = 1
          and iiq.inspect_status not in (0, 3)
        and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        WITH RECURSIVE AllDays AS (
        SELECT DATE(#{dto.beginDate}) AS day
        UNION ALL
        SELECT DATE_ADD(day, INTERVAL 1 DAY)
        FROM AllDays
        WHERE day &lt; DATE(#{dto.endDate})
        )
        SELECT
        DATE_FORMAT(ad.day,'%Y-%m-%d') AS searchTime,
        COALESCE(sub.qualified,0) AS qualified,
        COALESCE(sub.unQualified,0) AS unQualified,
        CASE
        WHEN COALESCE(sub.total,0) = 0 THEN 0
        ELSE ROUND(sub.qualified / sub.total * 100, 2)
        END AS passRate
        FROM AllDays ad
        LEFT JOIN (
        SELECT
        DATE(io1.send_time) AS day,
        COUNT(*) AS total,
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified
        FROM ifs_inventory_quantity iiq
        LEFT JOIN ins_order io1
        ON io1.ifs_inventory_id = iiq.id
        AND io1.order_type = #{dto.orderType}
        AND io1.state != -1
        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
        LEFT JOIN (
        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
        FROM ins_sample
        GROUP BY ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1,2)
        <if test="dto.materialProp != null and dto.materialProp != ''">
            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
        </if>
        <if test="dto.sampleName != null and dto.sampleName != ''">
            and ins.sample like concat('%', #{dto.sampleName}, '%')
            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
        </if>
        <if test="dto.modelName != null and dto.modelName != ''">
            and ins.model like concat('%', #{dto.modelName}, '%')
            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName != ''">
            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
        </if>
        GROUP BY DATE_FORMAT(io1.send_time, '%Y-%m-%d')
        having searchTime is not null
        order by searchTime
        GROUP BY DATE(io1.send_time)
        ) sub ON ad.day = sub.day
        ORDER BY ad.day
    </select>
    <!-- èŽ·å–æœ¬å¹´çš„åŽŸææ–™ä¿¡æ¯ -->
    <!-- èŽ·å–æœ¬å¹´çš„ç‰©æ–™å±žæ€§ä¿¡æ¯ -->
    <!-- èŽ·å–æœ¬å¹´çš„ç‰©æ–™å±žæ€§ä¿¡æ¯ -->
    <select id="getRawPassRateByBarChartByYear" resultType="java.util.Map">
        WITH RECURSIVE AllMonths AS (SELECT 1 AS month
                                     UNION ALL
                                     SELECT month + 1
                                     FROM AllMonths
                                     WHERE month &lt; 12)
        SELECT COALESCE(sub.sum, 0)      AS sum,
               CASE am.month
                   WHEN 1 THEN '1月'
                   WHEN 2 THEN '2月'
                   WHEN 3 THEN '3月'
                   WHEN 4 THEN '4月'
                   WHEN 5 THEN '5月'
                   WHEN 6 THEN '6月'
                   WHEN 7 THEN '7月'
                   WHEN 8 THEN '8月'
                   WHEN 9 THEN '9月'
                   WHEN 10 THEN '10月'
                   WHEN 11 THEN '11月'
                   WHEN 12 THEN '12月'
                END                   AS searchTime,
               COALESCE(sub.passRate, 0) AS passRate
        WITH RECURSIVE AllMonths AS (
        SELECT 1 AS month
        UNION ALL
        SELECT month + 1 FROM AllMonths WHERE month
        &lt;
        12
        )
        SELECT
        CASE am.month
        WHEN 1 THEN '1月'
        WHEN 2 THEN '2月'
        WHEN 3 THEN '3月'
        WHEN 4 THEN '4月'
        WHEN 5 THEN '5月'
        WHEN 6 THEN '6月'
        WHEN 7 THEN '7月'
        WHEN 8 THEN '8月'
        WHEN 9 THEN '9月'
        WHEN 10 THEN '10月'
        WHEN 11 THEN '11月'
        WHEN 12 THEN '12月'
        END AS searchTime,
        COALESCE(sub.qualified,0) AS qualified,
        COALESCE(sub.unQualified,0) AS unQualified,
        CASE
        WHEN COALESCE(sub.total,0) = 0 THEN 0
        ELSE ROUND(sub.qualified / sub.total * 100, 2)
        END AS passRate
        FROM AllMonths am
                 LEFT JOIN (select COUNT(*)                         sum,
                                   DATE_FORMAT(io1.send_time, '%m') searchTime,
                                   ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) /
                                         COUNT(*) * 100,
                                         2)                         passRate
                            from ifs_inventory_quantity iiq
                                     LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
                                and io1.order_type = #{dto.orderType}
                                and io1.state != -1
                                     left join (select is2.ins_order_id,
                                                       is2.sample_type,
                                                       is2.model,
                                                       is2.sample
                                                from ins_sample is2
                                                group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
                            where iiq.is_finish = 1
                              and iiq.inspect_status not in (0, 3)
                              and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        LEFT JOIN (
        SELECT
        MONTH(io1.send_time) AS month,
        COUNT(*) AS total,
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified
        FROM ifs_inventory_quantity iiq
        LEFT JOIN ins_order io1
        ON io1.ifs_inventory_id = iiq.id
        AND io1.order_type = #{dto.orderType}
        AND io1.state != -1
        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
        LEFT JOIN (
        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
        FROM ins_sample
        GROUP BY ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1,2)
        <if test="dto.materialProp != null and dto.materialProp != ''">
            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
        </if>
        <if test="dto.sampleName != null and dto.sampleName != ''">
            and ins.sample like concat('%', #{dto.sampleName}, '%')
            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
        </if>
        <if test="dto.modelName != null and dto.modelName != ''">
            and ins.model like concat('%', #{dto.modelName}, '%')
            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName != ''">
            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
        </if>
                            GROUP BY DATE_FORMAT(io1.send_time, '%Y-%m')
                            having searchTime is not null) sub ON am.month = sub.searchTime
        WHERE am.month BETWEEN 1 AND 12
        GROUP BY MONTH(io1.send_time)
        ) sub ON am.month = sub.month
        ORDER BY am.month
    </select>
    <!-- æŸ¥çœ‹åŽŸææ–™é¥¼çŠ¶å›¾ -->
    <!-- æŸ¥çœ‹ç‰©æ–™å±žæ€§é¥¼çж图 -->
    <select id="getRawPassRateByCake" resultType="java.util.Map">
        select COUNT(*)                                                                                             sum,
               (COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END))                               qualified,
               (COUNT(*) - SUM(CASE WHEN inspect_status = 1 THEN 1 ELSE 0 END))                                     unQualified,
               ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100,
                     2) AS passRate
        from ifs_inventory_quantity iiq
                 LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
            and io1.order_type = #{dto.orderType}
            and io1.state != -1
                 left join (select is2.ins_order_id,
                                   is2.sample_type,
                                   is2.model,
                                   is2.sample
                            from ins_sample is2
                            group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
        where iiq.is_finish = 1
          and iiq.inspect_status not in (0, 3)
          and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        SELECT
        COUNT(*) AS sum,
        /* åˆæ ¼ */
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
        /* ä¸åˆæ ¼ */
        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified,
        ROUND(
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END)
        / COUNT(*) * 100,
        2
        ) AS passRate
        FROM ifs_inventory_quantity iiq
        INNER JOIN ins_order io1
        ON io1.ifs_inventory_id = iiq.id
        LEFT JOIN (
        SELECT
        is2.ins_order_id,
        MAX(is2.sample_type) AS sample_type,
        MAX(is2.model) AS model,
        MAX(is2.sample) AS sample
        FROM ins_sample is2
        GROUP BY is2.ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1, 2)
        AND io1.order_type = #{dto.orderType}
        AND io1.state != -1
        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
        <if test="dto.materialProp != null and dto.materialProp.trim() != ''">
            AND IFNULL(iiq.material_prop, '') LIKE CONCAT('%', #{dto.materialProp}, '%')
        </if>
        <if test="dto.sampleName != null and dto.sampleName.trim() != ''">
            AND IFNULL(ins.sample, '') LIKE CONCAT('%', #{dto.sampleName}, '%')
        </if>
        <if test="dto.modelName != null and dto.modelName.trim() != ''">
            AND IFNULL(ins.model, '') LIKE CONCAT('%', #{dto.modelName}, '%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName.trim() != ''">
            AND IFNULL(iiq.supplier_name, '') LIKE CONCAT('%', #{dto.supplierName}, '%')
        </if>
    </select>
    <select id="getMaterialPropTable" resultType="com.ruoyi.inspect.dto.MaterialPropTableDTO">
        SELECT
        iiq.update_batch_no AS updateBatchNo, -- ä¿®æ”¹åŽæ‰¹æ¬¡å·
        iiq.qty_arrived AS qtyArrived, -- æŠµè¾¾çš„采购数量
        iiq.part_desc AS partDesc, -- é›¶ä»¶æè¿°
        iiq.inspect_status AS inspectStatus, -- åˆæ ¼çŠ¶æ€
        io1.send_time AS sendTime -- ä¸‹å‘æ—¶é—´
        FROM ifs_inventory_quantity iiq
        INNER JOIN ins_order io1
        ON io1.ifs_inventory_id = iiq.id
        AND io1.order_type = #{dto.orderType}
        AND io1.state != -1
        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
        LEFT JOIN (
        SELECT
        ins_order_id,
        MAX(sample) AS sample,
        MAX(model) AS model
        FROM ins_sample
        GROUP BY ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1,2)
        <if test="dto.materialProp != null and dto.materialProp != ''">
            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
        </if>
        <if test="dto.sampleName != null and dto.sampleName != ''">
            and ins.sample like concat('%', #{dto.sampleName}, '%')
            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
        </if>
        <if test="dto.modelName != null and dto.modelName != ''">
            and ins.model like concat('%', #{dto.modelName}, '%')
            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName != ''">
            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
        </if>
        ORDER BY io1.send_time DESC
    </select>
    <select id="getRawProductAnalysisAllSample" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
        select iiq.*,
               io1.entrust_code,
               io1.id     enter_order_id,
               ins.id     sample_id,
               ins.sample_type,
               ins.sample sample_name,
               ins.model  sample_model,
               io1.send_time
        io1.entrust_code,
        io1.id enter_order_id,
        ins.id sample_id,
        ins.sample_type,
        ins.sample sample_name,
        ins.model sample_model,
        io1.send_time
        from ifs_inventory_quantity iiq
                 LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
            and io1.order_type = #{dto.orderType}
            and io1.state != -1
                 left join ins_sample  ins on ins.ins_order_id = io1.id
        LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
        and io1.order_type = #{dto.orderType}
        and io1.state != -1
        left join ins_sample ins on ins.ins_order_id = io1.id
        where iiq.is_finish = 1
          and iiq.inspect_status not in (0, 3)
        and iiq.inspect_status not in (0, 3)
        <if test="dto.beginDate != null and dto.beginDate != '' and dto.endDate != null and dto.endDate != ''">
            and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        </if>
@@ -207,29 +316,29 @@
    <!-- æŸ¥è¯¢æ£€æµ‹é¡¹é›†åˆ -->
    <select id="getRawProductAnalysisList" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
        select iiq.*,
               io1.entrust_code,
               io1.id     enter_order_id,
               ins.id     sample_id,
               ins.sample_type,
               ins.sample sample_name,
               ins.model  sample_model,
               u.name     user_name,
               io1.send_time
        io1.entrust_code,
        io1.id enter_order_id,
        ins.id sample_id,
        ins.sample_type,
        ins.sample sample_name,
        ins.model sample_model,
        u.name user_name,
        io1.send_time
        from ifs_inventory_quantity iiq
                 LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
            and io1.order_type = #{dto.orderType}
            and io1.state != -1
                 left join user u on io1.create_user = u.id
                 left join (select is2.ins_order_id,
                                   is2.sample_type,
                                   is2.sample_code,
                                   is2.model,
                                   is2.sample,
                                   is2.id
                            from ins_sample is2
                            group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
        LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
        and io1.order_type = #{dto.orderType}
        and io1.state != -1
        left join user u on io1.create_user = u.id
        left join (select is2.ins_order_id,
        is2.sample_type,
        is2.sample_code,
        is2.model,
        is2.sample,
        is2.id
        from ins_sample is2
        group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
        where iiq.is_finish = 1
          and iiq.inspect_status not in (0, 3)
        and iiq.inspect_status not in (0, 3)
        <if test="dto.beginDate != null and dto.beginDate != '' and dto.endDate != null and dto.endDate != ''">
            and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        </if>
@@ -244,26 +353,26 @@
        </if>
    </select>
    <select id="getItemValueByOrderIds" resultType="com.ruoyi.inspect.vo.RawMaterialSupplierVo">
        select io2.id                   orderId,
               io2.entrust_code,
               ins.sample,
               ins.model,
               iiq.supplier_name,
               (select ip.`last_value`
                from ins_product ip
                where concat(ip.inspection_item, ip.inspection_item_subclass) = #{itemName}
                  and ip.ins_sample_id = ins.id
                limit 1) lastValue
        select io2.id orderId,
        io2.entrust_code,
        ins.sample,
        ins.model,
        iiq.supplier_name,
        (select ip.`last_value`
        from ins_product ip
        where concat(ip.inspection_item, ip.inspection_item_subclass) = #{itemName}
        and ip.ins_sample_id = ins.id
        limit 1) lastValue
        from ins_order io2
                 left join ifs_inventory_quantity iiq on io2.ifs_inventory_id = iiq.id
                 left join (select is2.ins_order_id,
                                   is2.sample_type,
                                   is2.sample_code,
                                   is2.model,
                                   is2.sample,
                                   is2.id
                            from ins_sample is2
                            group by is2.ins_order_id) ins on ins.ins_order_id = io2.id
        left join ifs_inventory_quantity iiq on io2.ifs_inventory_id = iiq.id
        left join (select is2.ins_order_id,
        is2.sample_type,
        is2.sample_code,
        is2.model,
        is2.sample,
        is2.id
        from ins_sample is2
        group by is2.ins_order_id) ins on ins.ins_order_id = io2.id
        where io2.id in
        <foreach collection="insOrderIds" index="index" open="(" separator="," close=")" item="val">
            #{val}
@@ -272,7 +381,7 @@
    <!-- æŸ¥è¯¢æœ¬æœˆä¸Žä¸Šæœˆåˆæ ¼çŽ‡å¯¹æ¯” -->
    <select id="getRawUpMonth" resultType="java.util.Map">
        select DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') as month,
        select DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') as                           month,
               (select ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) *
                             100,
                             2) passRate
@@ -282,10 +391,11 @@
                    and io1.state != -1
                where iiq.is_finish = 1
                  and iiq.inspect_status not in (0, 3)
                  and (io1.send_time between DATE_FORMAT(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH), '%Y-%m-%d %H:%i:%s')
                  and (io1.send_time between DATE_FORMAT(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH),
                                                         '%Y-%m-%d %H:%i:%s')
                    and DATE_FORMAT(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), '%Y-%m-%d 23:59:59'))) passRate
        UNION ALL
        select DATE_FORMAT(CURRENT_DATE, '%Y-%m') as month,
        select DATE_FORMAT(CURRENT_DATE, '%Y-%m') as                            month,
               (select ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) *
                             100,
                             2) passRate
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -417,13 +417,13 @@
        iiq.part_desc,
        iiq.lot_batch_no,
        iiq.part_no,
        iiq.inspect_status as ins_state,
        ippr.insulation_color,
        ippr.outer_color,
        ippr.drum_no,
        ippr.start_meter_mark,
        ippr.end_meter_mark,
        io.update_time,
        io.ins_state,
        -- æ£€éªŒäººæŸ¥è¯¢ï¼šä¼˜å…ˆå–指派的负责人,如果没有则取订单创建人
        COALESCE(isu.userName, u.name) AS inspector_name
        FROM ifs_inventory_quantity iiq