zouyu
7 天以前 56e6e0bf18c39a933aec78762b636fdf2efa8d68
外购成品检验报告生成功能
已添加2个文件
已修改12个文件
618 ■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/aspect/MoveLocationAfterPushMesStockAspect.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java 469 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsSampleUserVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/static/report-template.docx 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/static/small-wg-report-template.docx 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-ztns/src/main/resources/application-druid.yml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin-ztns/src/main/resources/application-ztns.yml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
@@ -155,9 +155,10 @@
     */
    private String getValueByDataStream(Map<String,Object> dataMap, String dataStream) {
        try{
            return dataMap.get(dataStream).toString();
            String val = dataMap.get(dataStream).toString();
            return StringUtils.isNotBlank(val)?val:"0";
        }catch (Exception e){
            return "";
            return "0";
        }
    }
inspect-server/src/main/java/com/ruoyi/inspect/aspect/MoveLocationAfterPushMesStockAspect.java
@@ -37,6 +37,9 @@
    private final static String LOCATION_NO = "WG-02-001";//mes外购合格库位
    public static final int DIGIT = 6;
    public static final String PREFIX ="KC";
    @AfterReturning(value = "execution(* com.ruoyi.inspect.service.impl.InsOrderServiceImpl.moveRawMaterial(..))")
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    public void doAfterReturning(JoinPoint joinPoint) {
@@ -55,6 +58,8 @@
                        .last("limit 1")
                );
                if(Objects.nonNull(one)){
                    //生成系统编号
                    //同步MES实时库存
                    Map<String, Object> requestMap = new HashMap<>();
                    requestMap.put("partNo", one.getPartNo()); // é›¶ä»¶ç¼–号
inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java
@@ -30,4 +30,25 @@
    @ApiModelProperty("检测编号")
    private String code;
    /**
     * å¤–护颜色
     */
    @ApiModelProperty("外护颜色")
    private String outerColor;
    /**
     * æ£€éªŒå‘˜
     */
    @ApiModelProperty("检验员")
    private String inspector;
    /**
     * æ£€éªŒæ—¥æœŸ
     */
    @ApiModelProperty("检验日期")
    private String inspectDate;
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
@@ -149,4 +149,5 @@
    Integer selectNotSpotCheckOrder(@Param("itmeId") Integer itmeId, @Param("startTime") String startTime, @Param("endTime") String endTime);
    IfsOrderVO selectOrderInfoById(@Param("id") Integer id);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsSampleUser;
import com.ruoyi.inspect.vo.InsSampleUserVO;
import org.apache.ibatis.annotations.Param;
/**
* @author Administrator
@@ -11,6 +13,7 @@
*/
public interface InsSampleUserMapper extends BaseMapper<InsSampleUser> {
    InsSampleUserVO selectUserNameByOrderId(@Param("orderId") Integer orderId);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -2,6 +2,7 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -11,7 +12,6 @@
import com.alibaba.fastjson.JSONObject;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -31,13 +31,13 @@
import com.ruoyi.basic.pojo.IfsInventoryQuantity;
import com.ruoyi.basic.pojo.StandardTemplate;
import com.ruoyi.basic.service.StandardTemplateService;
import com.ruoyi.basic.vo.IfsInventoryQuantityVO;
import com.ruoyi.common.constant.DictDataConstants;
import com.ruoyi.common.constant.InsOrderTypeConstants;
import com.ruoyi.common.constant.MenuJumpPathConstants;
import com.ruoyi.common.core.domain.entity.Custom;
import com.ruoyi.common.core.domain.entity.InformationNotification;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.enums.OrderType;
import com.ruoyi.common.utils.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.*;
@@ -47,13 +47,10 @@
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
import com.ruoyi.inspect.vo.InsOrderPlanVO;
import com.ruoyi.inspect.vo.InsSampleUserVO;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.mapper.PerformanceShiftMapper;
import com.ruoyi.performance.mapper.ShiftTimeMapper;
import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHoursTemporary;
import com.ruoyi.performance.service.AuxiliaryOutputWorkingHoursService;
import com.ruoyi.performance.service.AuxiliaryOutputWorkingHoursTemporaryService;
import com.ruoyi.system.mapper.CustomMapper;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.ISysDictTypeService;
@@ -76,9 +73,7 @@
import java.nio.file.Paths;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -132,6 +127,8 @@
    private InsOrderFileMapper insOrderFileMapper;
    @Resource
    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
    @Resource
    private IfsPartPropsRecordMapper ifsPartPropsRecordMapper;
    @Resource
    private InsReportService insReportService;
    @Resource
@@ -1635,6 +1632,95 @@
    /*****************************************************  å°æŠ¥å‘Š    ***************************************************************************/
    /**
     * è®¾ç½®è¡¨æ ¼æ ·å¼
     * @param max æ ‡è¯†æœ€å¤§ä¸ªæ•°
     * @return
     */
    private TableStyle setTableStyle(int max){
        //设置样式
        TableStyle tableStyle = new TableStyle();
        if(max<=5){
            for (int i = 1; i <= max; i++) {
                // æ ¹æ®æ£€éªŒç»“果个数修改长度
                switch (i) {
                    case 1:
                        tableStyle.setColWidths(new int[]{650, 2900, 850, 2300, 2100, 1200});
                        break;
                    case 2:
                        tableStyle.setColWidths(new int[]{650, 2700, 850, 2200, 1200, 1200, 1200});
                        break;
                    case 3:
                        tableStyle.setColWidths(new int[]{650, 2700, 850, 1600, 1000, 1000, 1000, 1200});
                        break;
                    case 4:
                        tableStyle.setColWidths(new int[]{650, 2400, 850, 1500, 850, 850, 850, 850, 1200});
                        break;
                    case 5:
                        tableStyle.setColWidths(new int[]{650, 2200, 850, 1350, 770, 770, 770, 770, 770, 1100});
                        break;
                }
            }
        }
        tableStyle.setWidth("10000");
        tableStyle.setAlign(TableRowAlign.CENTER);
        BorderStyle borderStyle = new BorderStyle();
        borderStyle.setColor("000000");
        borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
        borderStyle.setSize(4);
        tableStyle.setLeftBorder(borderStyle);
        tableStyle.setRightBorder(borderStyle);
        tableStyle.setInsideHBorder(borderStyle); // è®¾ç½®æ°´å¹³å†…边框
        tableStyle.setInsideVBorder(borderStyle);
        return tableStyle;
    }
    /**
     * å¤„理有电缆颜色标识的检测项
     * @param cableTags ç”µç¼†é¢œè‰²æ ‡è¯†
     * @param collect   æ£€æµ‹é¡¹åˆ—表
     * @param startIndex èµ·å§‹ä¸‹æ ‡
     * @param endIndex   ç»“束下标
     * @return
     */
    private List<SampleProductExportDto> transformSampleProduct(List<String> cableTags,Map<String, List<SampleProductExportDto>> collect,int startIndex,int endIndex){
        List<SampleProductExportDto> sampleProductExportDtos = new ArrayList<>();
        for (String s : collect.keySet()) {
            List<String> lastValueList = new ArrayList<>();
            SampleProductExportDto dto = new SampleProductExportDto();
            BeanUtil.copyProperties(collect.get(s).get(0),dto);
            Set<String> tellSet = new HashSet<>();
            for (int i = startIndex; i < endIndex; i++) {
                String cableTag = cableTags.get(i);
                for (SampleProductExportDto sDto : collect.get(s)) {
                    tellSet.add(sDto.getTell());
                    if(sDto.getCableTag().equals(cableTag)){
                        lastValueList.add(sDto.getLastValue());
                    }
                }
            }
            //切割电缆配置项
            dto.setTell(String.join("\n",tellSet));
            dto.setLastValueList(lastValueList);
            sampleProductExportDtos.add(dto);
        }
        return sampleProductExportDtos;
    }
    /**
     * æ£€æµ‹é¡¹æŽ’序
     * @param sourceMap
     * @param targetMap
     */
    private void sortSampleProduct(Map<String, List<SampleProductExportDto>> sourceMap,Map<String, List<SampleProductExportDto>> targetMap){
        List<Map.Entry<String, List<SampleProductExportDto>>> entries = new ArrayList<>(sourceMap.entrySet());
        entries.sort(Comparator.comparingInt(o -> (o.getValue().get(0).getSort() == null ? 0 : o.getValue().get(0).getSort())));
        for (Map.Entry<String, List<SampleProductExportDto>> entry : entries) {
            targetMap.put(entry.getKey(), entry.getValue());
        }
    }
    /**
     * å°æŠ¥å‘Šç”Ÿæˆ
     * @param orderId
     * @param insOrder
@@ -1652,11 +1738,17 @@
        enterFactoryReport.setSample(insOrder.getSample());
        // èŽ·å–ifs数据
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
        //查询零件属性
        IfsPartPropsRecord ifsPartPropsRecord = ifsPartPropsRecordMapper.selectOne(Wrappers.<IfsPartPropsRecord>lambdaQuery()
                .eq(IfsPartPropsRecord::getIfsInventoryId, ifsInventoryQuantity.getId()));
        if(Objects.nonNull(ifsPartPropsRecord)){
            enterFactoryReport.setOuterColor(ifsPartPropsRecord.getOuterColor());
        }
        enterFactoryReport.setQtyArrived(ifsInventoryQuantity.getQtyArrived() == null ? "" :
                ifsInventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + ifsInventoryQuantity.getBuyUnitMeas());
        enterFactoryReport.setQuantity(insOrder.getTestQuantity());
        enterFactoryReport.setPartDesc(insOrder.getPartDetail());
        enterFactoryReport.setSupplierName("**********");
        enterFactoryReport.setSupplierName(ifsInventoryQuantity.getSupplierName());
        enterFactoryReport.setLotBatchNo(ifsInventoryQuantity.getUpdateBatchNo());
        // æ£€æµ‹ä¾æ®
@@ -1674,6 +1766,7 @@
        List<RowRenderData> rows = new ArrayList<>();
        List<TextRenderData> text = new ArrayList<>();
        RowRenderData rowRenderData = null;
        List<Map<String,Object>> cableTagEnclosureTables = new ArrayList<>();
        // æŸ¥è¯¢æ£€éªŒå†…容
        List<SampleProductExportDto> sampleProductDto2s = insOrderMapper.selectSampleBySampleId(insSamples.stream()
@@ -1684,21 +1777,173 @@
        List<SampleProductExportDto> sampleList = new ArrayList<>();
        Integer max = insSamples.stream().mapToInt(InsSample::getQuantity).sum();
        TableRenderData tableRenderData = new TableRenderData();
        String templateName;
        if(StringUtils.equals(OrderType.WG.getValue(),ifsInventoryQuantity.getOrderType())){
            //过滤不判定的检测项
            List<SampleProductExportDto> filterItems = sampleProductDto2s.stream().filter(f -> f.getInsResult() != 3).collect(Collectors.toList());
            int maxCableTag = 5;//单个表格,电缆颜色标识最大个数
            templateName = "/static/small-wg-report-template.docx";
            //查询检验单消息
            InsSampleUserVO insSampleUser = insSampleUserMapper.selectUserNameByOrderId(orderId);
            if(Objects.nonNull(insSampleUser)){
                enterFactoryReport.setPartDesc(insSampleUser.getModel());
                enterFactoryReport.setInspector(insSampleUser.getInspector());
                enterFactoryReport.setInspectDate(insSampleUser.getInspectDate());
            }
        // è½¬æˆMpa进行排序
        Map<String, List<SampleProductExportDto>> sortedMap = sampleProductDto2s.stream()
                .filter(sampleProductDto2 -> StringUtils.isNotBlank(sampleProductDto2.getInspectionItem()))
                .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItem));
        List<Map.Entry<String, List<SampleProductExportDto>>> entries = new ArrayList<>(sortedMap.entrySet());
        entries.sort((o1, o2) -> (o1.getValue().get(0).getSort() == null ? 0 : o1.getValue().get(0).getSort())
                - (o2.getValue().get(0).getSort() == null ? 0 : o2.getValue().get(0).getSort()));
        // åˆ›å»ºä¸€ä¸ª LinkedHashMap æ¥ä¿æŒæ’入顺序
        Map<String, List<SampleProductExportDto>> item = new LinkedHashMap<>();
        for (Map.Entry<String, List<SampleProductExportDto>> entry : entries) {
            item.put(entry.getKey(), entry.getValue());
            Map<String, List<SampleProductExportDto>> item = new LinkedHashMap<>();//非电缆配置检测项
            Map<String, List<SampleProductExportDto>> cableTagItem = new LinkedHashMap<>();//电缆配置检测项
            Map<String, List<SampleProductExportDto>> cableTagEnclosureItem = new LinkedHashMap<>();//电缆配置检测项附件
            AtomicInteger finalIndex = new AtomicInteger(1);
            List<String> cableTags = insOrderMapper.selectSampleCableTag(insSample.getId());
            max = cableTags.size();
            //处理电缆配置检测项
            Map<String, List<SampleProductExportDto>> tempMap = new HashMap<>();
            Map<String, List<SampleProductExportDto>> tempMap2 = new HashMap<>();
            Map<String, List<SampleProductExportDto>> listMap2 = filterItems.stream()
                    .filter(f -> StringUtils.isNotBlank(f.getCableTag()) && StringUtils.isNotBlank(f.getInspectionItem()))
                    .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItem));
            for (String key : listMap2.keySet()) {
                List<SampleProductExportDto> sampleProductExportDtos;
                List<SampleProductExportDto> sampleProductExportDtos2;
                //处理电缆配置项
                Map<String, List<SampleProductExportDto>> collect = listMap2.get(key).stream().collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItemSubclass));
                if(cableTags.size()>maxCableTag){
                    sampleProductExportDtos = transformSampleProduct(cableTags,collect,0,maxCableTag);
                    sampleProductExportDtos2 = transformSampleProduct(cableTags,collect,maxCableTag,cableTags.size());
                    tempMap2.put(key,sampleProductExportDtos2);
                }else{
                    sampleProductExportDtos = transformSampleProduct(cableTags,collect,0,cableTags.size());
                }
                tempMap.put(key,sampleProductExportDtos);
            }
            sortSampleProduct(tempMap,cableTagItem);
            int tagNum = Math.min(max,maxCableTag);
            List<String> tagList = cableTags.subList(0,tagNum);
            handlerSampleItems(cableTagItem,finalIndex,sampleList,tagNum,text,rows,rowRenderData,resultCh,tagList,true);
            if(CollectionUtil.isNotEmpty(tempMap2)){
                sortSampleProduct(tempMap2,cableTagEnclosureItem);
                //生成附件电缆表格
                TableRenderData tableRenderData2 = new TableRenderData();
                List<String> newCableTags = cableTags.subList(maxCableTag,cableTags.size());
                AtomicInteger finalIndex2 = new AtomicInteger(1);
                List<TextRenderData> newText = new ArrayList<TextRenderData>();
                List<RowRenderData> newRows = new ArrayList<>();
                RowRenderData newRowRenderData = null;
                handlerSampleItems(cableTagEnclosureItem,finalIndex2, new ArrayList<>(),newCableTags.size(),newText,newRows,newRowRenderData,resultCh,newCableTags,true);
                tableRenderData2.setRows(newRows);
                tableRenderData2.setTableStyle(setTableStyle(newCableTags.size()));
                HashMap<String, Object> tableMap = new HashMap<>();
                tableMap.put("enclosureTable",tableRenderData2);
                tableMap.put("resultCh", resultCh);
                tableMap.put("writeUrl", null);
                tableMap.put("examineUrl", null);
                tableMap.put("ratifyUrl", null);
                tableMap.put("writeDateUrl", null);
                tableMap.put("examineDateUrl", null);
                tableMap.put("ratifyDateUrl", null);
                tableMap.put("seal1", null);
                cableTagEnclosureTables.add(tableMap);
            }
            //处理非电缆配置检测项
            Map<String, List<SampleProductExportDto>> listMap = filterItems.stream()
                    .filter(f -> StringUtils.isBlank(f.getCableTag()) && StringUtils.isNotBlank(f.getInspectionItem()))
                    .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItem));
            sortSampleProduct(listMap,item);
            text = new ArrayList<>();
            sampleList = new ArrayList<>();
            handlerSampleItems(item,finalIndex,sampleList,tagNum,text,rows,rowRenderData,resultCh,cableTags,false);
            tableRenderData.setRows(rows);
            tableRenderData.setTableStyle(setTableStyle(tagNum));
            if (!resultCh.get().equals("")) {
                resultCh.set("经检验," + resultCh.get() + "所检项目不合格,其余所检项目均合格。(盖章有效)");
            } else {
                resultCh.set("本产品符合相关标准要求,经检验合格准予出厂(盖章有效)");
            }
        }else{
            templateName = "/static/small-report-template.docx";
            // è½¬æˆMpa进行排序
            Map<String, List<SampleProductExportDto>> sortedMap = sampleProductDto2s.stream()
                    .filter(sampleProductDto2 -> StringUtils.isNotBlank(sampleProductDto2.getInspectionItem()))
                    .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItem));
//            List<Map.Entry<String, List<SampleProductExportDto>>> entries = new ArrayList<>(sortedMap.entrySet());
//            entries.sort(Comparator.comparingInt(o -> (o.getValue().get(0).getSort() == null ? 0 : o.getValue().get(0).getSort())));
//            // åˆ›å»ºä¸€ä¸ª LinkedHashMap æ¥ä¿æŒæ’入顺序
            Map<String, List<SampleProductExportDto>> item = new LinkedHashMap<>();
//            for (Map.Entry<String, List<SampleProductExportDto>> entry : entries) {
//                item.put(entry.getKey(), entry.getValue());
//            }
            sortSampleProduct(sortedMap,item);
            AtomicInteger finalIndex = new AtomicInteger(1);
            handlerSampleItems(item,finalIndex,sampleList,max,text,rows,rowRenderData,resultCh,null,true);
            tableRenderData.setRows(rows);
            tableRenderData.setTableStyle(setTableStyle(max));
            if (!resultCh.get().equals("")) {
                resultCh.set("经检验," + resultCh.get() + "所检项目不合格,其余所检项目均合格。");
            } else {
                resultCh.set("经检验此批" + enterFactoryReport.getSample() + "各项目均符合检验规范要求。");
            }
        }
        AtomicInteger finalIndex = new AtomicInteger(1);
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        InputStream inputStream = this.getClass().getResourceAsStream(templateName);
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("report", enterFactoryReport);
                    put("standardMethod", standardMethod2.toString().equals("null") ? "" : standardMethod2);
                    put("orderType", orderType);
                    put("table", tableRenderData);
                    put("enclosureTables", cableTagEnclosureTables.isEmpty()?null:cableTagEnclosureTables);
                    put("resultCh", resultCh);
                    put("writeUrl", null);
                    put("examineUrl", null);
                    put("ratifyUrl", null);
                    put("writeDateUrl", null);
                    put("examineDateUrl", null);
                    put("ratifyDateUrl", null);
                    put("seal1", null);
                }});
        try {
            // ä¿®æ”¹æ¢è¡Œå’Œåˆå¹¶é—®é¢˜
            updaeMerge(template.getXWPFDocument(), true);
            String name = insReport.getCode().replace("/", "") + "-J.docx";
            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
            insReport.setUrl("/word/" + name);
            insReport.setIsPass(0);
            insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//提交人
            insReport.setWriteTime(LocalDateTime.now());//提交时间
            // æŸ¥è¯¢æŠ¥å‘Š, åˆ¤æ–­ä¹‹å‰æ˜¯å¦æ·»åŠ è¿‡, æ·»åŠ è¿‡åˆ é™¤
            insReportMapper.delete(Wrappers.<InsReport>lambdaQuery()
                    .eq(InsReport::getInsOrderId, insOrder.getId()));
            insReportMapper.insert(insReport);
            inputStream.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * å¤„理常规检测项
     * @param item
     * @param finalIndex
     * @param sampleList
     * @param max
     * @param text
     * @param rows
     * @param rowRenderData
     * @param resultCh
     */
    private static void handlerSampleItems(Map<String, List<SampleProductExportDto>> item,AtomicInteger finalIndex,List<SampleProductExportDto> sampleList,Integer max,List<TextRenderData> text,List<RowRenderData> rows,RowRenderData rowRenderData,AtomicReference<String> resultCh,List<String> cableTagList,Boolean hasAddHead ){
        item.forEach((s, sampleProductDtoInside) -> {
            // æ·»åŠ æ£€éªŒé¡¹
            SampleProductExportDto dto2 = new SampleProductExportDto();
@@ -1714,16 +1959,20 @@
                    String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem();
                    if (map.containsKey(productName)) {
                        // å¦‚果名称已经存在,添加 lastValue å€¼åˆ° lastValueList åˆ—表
                        map.get(productName)
                                .getLastValueList()
                                .add(productDto2.getLastValue());
                        if(CollectionUtil.isEmpty(map.get(productName).getLastValueList())){
                            map.get(productName)
                                    .getLastValueList()
                                    .add(productDto2.getLastValue());
                        }
                        map.get(productName)
                                .getInsResultList()
                                .add(productDto2.getInsResult());
                    } else {
                        // å¦‚果名称不存在,直接放入 map
                        productDto2.setLastValueList(new ArrayList<>()); // æ£€éªŒå†…容
                        productDto2.getLastValueList().add(productDto2.getLastValue());
                        if(CollectionUtil.isEmpty(productDto2.getLastValueList())){
                            productDto2.setLastValueList(new ArrayList<>()); // æ£€éªŒå†…容
                            productDto2.getLastValueList().add(productDto2.getLastValue());
                        }
                        productDto2.setInsResultList(new ArrayList<>()); // ç»“æžœ
                        productDto2.getInsResultList().add(productDto2.getInsResult());
@@ -1755,16 +2004,20 @@
                    String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem() + productDto2.getInspectionItemSubclass();
                    if (map.containsKey(productName)) {
                        // å¦‚果名称已经存在,添加 lastValue å€¼åˆ° lastValueList åˆ—表
                        map.get(productName)
                                .getLastValueList()
                                .add(productDto2.getLastValue());
                        if(CollectionUtil.isEmpty(map.get(productName).getLastValueList())){
                            map.get(productName)
                                    .getLastValueList()
                                    .add(productDto2.getLastValue());
                        }
                        map.get(productName)
                                .getInsResultList()
                                .add(productDto2.getInsResult());
                    } else {
                        // å¦‚果名称不存在,直接放入 map
                        productDto2.setLastValueList(new ArrayList<>()); // æ£€éªŒå†…容
                        productDto2.getLastValueList().add(productDto2.getLastValue());
                        if(CollectionUtil.isEmpty(productDto2.getLastValueList())){
                            productDto2.setLastValueList(new ArrayList<>()); // æ£€éªŒå†…容
                            productDto2.getLastValueList().add(productDto2.getLastValue());
                        }
                        productDto2.setInsResultList(new ArrayList<>()); // ç»“æžœ
                        productDto2.getInsResultList().add(productDto2.getInsResult());
@@ -1782,8 +2035,9 @@
        });
        // æ·»åŠ å°æŠ¥å‘Šè¡¨å¤´
        text = addSmallHead(text, max, rows);
        if(hasAddHead){
            text = addSmallHead(text, max, rows,cableTagList);
        }
        // ä¸­é—´æ£€æµ‹å€¼æ·»åŠ 
        for (int i = 0; i < sampleList.size(); i++) {
@@ -1800,7 +2054,7 @@
            // æ£€éªŒé¡¹ç›®
            TextRenderData middleRenderData2 = new TextRenderData();
            middleRenderData2.setText(sample.getInspectionName());
            middleRenderData2.setText(sample.getInspectionName()+"∑"+sample.getInspectionName()+i);
            Style middleStyle2 = new Style();
            middleStyle2.setFontFamily("宋体");
            middleStyle2.setColor("000000");
@@ -1887,7 +2141,7 @@
                    TextRenderData middleRenderData6 = new TextRenderData();
                    middleRenderData6.setText((StringUtils.isNotEmpty(sample.getLastValue()) ?
                            sample.getLastValue() : "")
                            + "∑" + (7 + i));
                            + "∑" + (finalIndex.get() +"_"+ i));
                    Style middleStyle6 = new Style();
                    middleStyle6.setFontFamily("宋体");
                    middleStyle6.setColor("000000");
@@ -1925,7 +2179,7 @@
                            String type;
                            if (count.equals(0)) {
                                // æ·»åŠ ä¸åˆæ ¼æè¿°
                                String item1 = (max == 1 ? "" : "第" + Integer.toString(index) + "次")
                                String item1 = (max == 1 ? "" : "第" + index + "次")
                                        + sample.getInspectionItem()
                                        + (StringUtils.isBlank(sample.getInspectionItemSubclass()) ? "" : "" + sample.getInspectionItemSubclass());
                                if (resultCh.get().equals("")) {
@@ -1965,98 +2219,17 @@
            text = new ArrayList<>();
        }
        TableRenderData tableRenderData = new TableRenderData();
        tableRenderData.setRows(rows);
        //设置样式
        TableStyle tableStyle = new TableStyle();
        if(max<=5){
            for (int i = 1; i <= max; i++) {
                // æ ¹æ®æ£€éªŒç»“果个数修改长度
                switch (i) {
                    case 1:
                        tableStyle.setColWidths(new int[]{650, 2900, 850, 2300, 2100, 1200});
                        break;
                    case 2:
                        tableStyle.setColWidths(new int[]{650, 2700, 850, 2200, 1200, 1200, 1200});
                        break;
                    case 3:
                        tableStyle.setColWidths(new int[]{650, 2700, 850, 1600, 1000, 1000, 1000, 1200});
                        break;
                    case 4:
                        tableStyle.setColWidths(new int[]{650, 2400, 850, 1500, 850, 850, 850, 850, 1200});
                        break;
                    case 5:
                        tableStyle.setColWidths(new int[]{650, 2200, 850, 1350, 750, 750, 750, 750, 750, 1200});
                        break;
                }
            }
        }
        tableStyle.setWidth("10000");
        tableStyle.setAlign(TableRowAlign.CENTER);
        BorderStyle borderStyle = new BorderStyle();
        borderStyle.setColor("000000");
        borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
        borderStyle.setSize(4);
        tableStyle.setLeftBorder(borderStyle);
        tableStyle.setRightBorder(borderStyle);
        tableStyle.setInsideHBorder(borderStyle); // è®¾ç½®æ°´å¹³å†…边框
        tableStyle.setInsideVBorder(borderStyle);
        tableRenderData.setTableStyle(tableStyle);
        if (!resultCh.get().equals("")) {
            resultCh.set("经检验," + resultCh.get() + "所检项目不合格,其余所检项目均合格。");
        } else {
            resultCh.set("经检验此批" + enterFactoryReport.getSample() + "各项目均符合检验规范要求。");
        }
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        InputStream inputStream = this.getClass().getResourceAsStream("/static/small-report-template.docx");
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("report", enterFactoryReport);
                    put("standardMethod", standardMethod2.toString().equals("null") ? "" : standardMethod2);
                    put("orderType", orderType);
                    put("table", tableRenderData);
                    put("resultCh", resultCh);
                    put("writeUrl", null);
                    put("examineUrl", null);
                    put("ratifyUrl", null);
                    put("writeDateUrl", null);
                    put("examineDateUrl", null);
                    put("ratifyDateUrl", null);
                    put("seal1", null);
                }});
        try {
            // ä¿®æ”¹æ¢è¡Œå’Œåˆå¹¶é—®é¢˜
            updaeMerge(template.getXWPFDocument(), true);
            String name = insReport.getCode().replace("/", "") + "-J.docx";
            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
            insReport.setUrl("/word/" + name);
            insReport.setIsPass(0);
            insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//提交人
            insReport.setWriteTime(LocalDateTime.now());//提交时间
            // æŸ¥è¯¢æŠ¥å‘Š, åˆ¤æ–­ä¹‹å‰æ˜¯å¦æ·»åŠ è¿‡, æ·»åŠ è¿‡åˆ é™¤
            insReportMapper.delete(Wrappers.<InsReport>lambdaQuery()
                    .eq(InsReport::getInsOrderId, insOrder.getId()));
            insReportMapper.insert(insReport);
            inputStream.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * æ·»åŠ å°å®è¡¨å¤´
     * æ·»åŠ å°æŠ¥å‘Šè¡¨å¤´
     * @param text
     * @param max
     * @param rows
     * @return
     */
    private static List<TextRenderData> addSmallHead(List<TextRenderData> text, Integer max, List<RowRenderData> rows) {
    private static List<TextRenderData> addSmallHead(List<TextRenderData> text, Integer max, List<RowRenderData> rows,List<String> cableTagList) {
        RowRenderData rowRenderData;
//        // å¤´
        TextRenderData headRenderData1 = new TextRenderData();
@@ -2114,7 +2287,7 @@
        text = new ArrayList<>();
        // ç¬¬äºŒè¡Œ(可能没有)
        if (max > 1) {
        if (max > 1 && CollectionUtil.isEmpty(cableTagList)) {
            TextRenderData tagRenderData1 = new TextRenderData();
            tagRenderData1.setText("");
            Style tagStyle1 = new Style();
@@ -2168,8 +2341,62 @@
            rowRenderData = Rows.of(text4).center().rowAtleastHeight(1).create();
            rows.add(rowRenderData);
            text = new ArrayList<>();
        }
        //如果有电缆颜色,生成颜色标识行
        if(CollectionUtil.isNotEmpty(cableTagList)){
            TextRenderData tagRenderData1 = new TextRenderData();
            tagRenderData1.setText("");
            Style tagStyle1 = new Style();
            tagStyle1.setFontFamily("宋体");
            tagStyle1.setColor("000000");
            tagRenderData1.setStyle(tagStyle1);
            text.add(tagRenderData1);
            TextRenderData tagRenderData2 = new TextRenderData();
            tagRenderData2.setText("绝缘线芯颜色和标志");
            Style tagStyle2 = new Style();
            tagStyle2.setFontFamily("宋体");
            tagStyle2.setColor("000000");
            tagRenderData2.setStyle(tagStyle2);
            text.add(tagRenderData2);
            TextRenderData tagRenderData4 = new TextRenderData();
            tagRenderData4.setText("/");
            Style tagStyle4 = new Style();
            tagStyle4.setFontFamily("宋体");
            tagStyle4.setColor("000000");
            tagRenderData4.setStyle(tagStyle4);
            text.add(tagRenderData4);
            TextRenderData tagRenderData5 = new TextRenderData();
            tagRenderData5.setText("/");
            Style tagStyle5 = new Style();
            tagStyle5.setFontFamily("宋体");
            tagStyle5.setColor("000000");
            tagRenderData5.setStyle(tagStyle5);
            text.add(tagRenderData5);
            for (String cableTag : cableTagList) {
                TextRenderData tagRenderData6 = new TextRenderData();
                tagRenderData6.setText(cableTag);
                Style tagStyle6 = new Style();
                tagStyle6.setFontFamily("宋体");
                tagStyle6.setColor("000000");
                tagRenderData6.setStyle(tagStyle6);
                text.add(tagRenderData6);
            }
            TextRenderData tagRenderData7 = new TextRenderData();
            tagRenderData7.setText("/");
            Style tagStyle7 = new Style();
            tagStyle7.setFontFamily("宋体");
            tagStyle7.setColor("000000");
            tagRenderData7.setStyle(tagStyle7);
            text.add(tagRenderData7);
            TextRenderData[] text4 = text.toArray(new TextRenderData[0]);
            rowRenderData = Rows.of(text4).center().rowAtleastHeight(1).create();
            rows.add(rowRenderData);
            text = new ArrayList<>();
        }
        return text;
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -646,11 +646,12 @@
                if(isSplitOrder){
                    ifsInventoryQuantity.setIsSplitOrder(1);
                }
                //todo:不清楚用途,暂时注释掉
                // æŸ¥è¯¢äº§ä¸šé“¾æ£€æµ‹æ•°æ®
                String industryChainAttrFields = IndustryChainUtils.getIndustryChainAttrFields(ifsInventoryQuantity.getOrderNo(),
                        ifsInventoryQuantity.getLineNo(),
                        ifsInventoryQuantity.getReleaseNo());
                ifsInventoryQuantity.setIndustryChain(industryChainAttrFields);
//                String industryChainAttrFields = IndustryChainUtils.getIndustryChainAttrFields(ifsInventoryQuantity.getOrderNo(),
//                        ifsInventoryQuantity.getLineNo(),
//                        ifsInventoryQuantity.getReleaseNo());
//                ifsInventoryQuantity.setIndustryChain(industryChainAttrFields);
                ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
            }
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -20,23 +20,24 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.*;
import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
import com.ruoyi.basic.mapper.StandardTreeMapper;
import com.ruoyi.basic.pojo.IfsInventoryQuantity;
import com.ruoyi.common.config.WechatProperty;
import com.ruoyi.common.constant.InsOrderTypeConstants;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.config.WechatProperty;
import com.ruoyi.common.enums.OrderType;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.LimsDateUtil;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.common.utils.api.IfsApiUtils;
import com.ruoyi.common.utils.api.MesApiUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.CopperInsOrderDto;
import com.ruoyi.inspect.dto.OrderSplitDTO;
import com.ruoyi.inspect.dto.RawMaterialStandardTreeDto;
import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
import com.ruoyi.basic.mapper.StandardTreeMapper;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.excel.OrderSplitExcelData;
import com.ruoyi.inspect.excel.OrderSplitExcelListener;
@@ -47,13 +48,10 @@
import com.ruoyi.inspect.pojo.IfsSplitOrderRecord;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.pojo.InsUnqualifiedHandler;
import com.ruoyi.inspect.service.IfsSplitOrderRecordService;
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsReportService;
import com.ruoyi.inspect.service.RawMaterialOrderService;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
import com.ruoyi.system.mapper.UserMapper;
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsSampleUserVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.inspect.vo;
import com.ruoyi.inspect.pojo.InsSampleUser;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class InsSampleUserVO extends InsSampleUser implements Serializable {
    /**
     * æ£€éªŒå‘˜
     */
    @ApiModelProperty("检验员")
    private String inspector;
    /**
     * æ£€éªŒæ—¥æœŸ
     */
    @ApiModelProperty("检验日期")
    private String inspectDate;
    /**
     * åž‹å·
     */
    @ApiModelProperty("型号")
    private String model;
}
inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml
@@ -1,4 +1,16 @@
<?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.InsSampleUserMapper">
    <select id="selectUserNameByOrderId" resultType="com.ruoyi.inspect.vo.InsSampleUserVO">
        select
            group_concat(DISTINCT u.name separator ',') AS inspector,
            date_format(isu.create_time,'%Y-%m-%d') AS inspect_date,
            isa.model
        from ins_sample_user isu
            left join ins_sample isa on isu.ins_sample_id = isa.ins_order_id
            left join user u on isu.user_id=u.id
        where isu.ins_sample_id=#{orderId} and isu.state=0
        group by isu.ins_sample_id
        order by isu.create_time
    </select>
</mapper>
inspect-server/src/main/resources/static/report-template.docx
Binary files differ
inspect-server/src/main/resources/static/small-wg-report-template.docx
Binary files differ
ruoyi-admin-ztns/src/main/resources/application-druid.yml
@@ -168,7 +168,7 @@
# å¤‡æ³¨ 18083密码:zttZTT123!@
mqtt:
  - url: tcp://mqtt.ztt.cn:1883 # æœåС噍ip
  - url: tcp://192.168.21.97:1883 # æœåС噍ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
@@ -177,8 +177,8 @@
    completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
    clientId: ztns_gc_scl_108303_dev # clientId,过程试验室伸长率设备
    subscribe: /aiot/5447dad0-c6b9-11f0-8b13-c14e8310d70b # è®¢é˜…主题
    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # æœåС噍ip
    client: false # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://192.168.21.97:1883 # æœåС噍ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
@@ -187,8 +187,8 @@
    completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
    clientId: ztns_gc_dz_108301_dev # clientId
    subscribe: /aiot/51eaff10-c6b9-11f0-8b13-c14e8310d70b # è®¢é˜…主题
    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # æœåС噍ip
    client: false # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://192.168.21.97:1883 # æœåС噍ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
@@ -197,8 +197,8 @@
    completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
    clientId: ztns_cp_scl_108295_dev # clientId,成品试验室伸长率设备
    subscribe: /aiot/a4b27900-c6b7-11f0-8b13-c14e8310d70b # è®¢é˜…主题
    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # æœåС噍ip
    client: false # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://192.168.21.97:1883 # æœåС噍ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
@@ -207,4 +207,4 @@
    completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
    clientId: ztns_cp_dz_108300_dev # clientId,成品试验室电阻
    subscribe: /aiot/4e40cdb0-c6b7-11f0-8b13-c14e8310d70b # è®¢é˜…主题
    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
    client: false # å¦‚果开发需要启动测试,需要改为false不然会一直报错
ruoyi-admin-ztns/src/main/resources/application-ztns.yml
@@ -169,27 +169,7 @@
# å¤‡æ³¨ 18083密码:zttZTT123!@
mqtt:
#  - url: tcp://mqtt-ztt.zttiot.com:1883 # æœåС噍ip
#    username: 2455220 # MQTT-服务端-用户名,后期会修改为用户登录名
#    password: 108300 # MQTT-服务端-密码,,后期会修改为用户登录密码
#    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
#    keepalive: 60 # å¿ƒè·³ ï¼ˆå•位:秒)
#    qos: 1 # å¿ƒè·³åŒ…级别
#    completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
#    clientId: ztns01 # clientId
#    subscribe: /ztt/v3/2455220/publish # è®¢é˜…主题
#    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
#  - url: tcp://mqtt-ztt.zttiot.com:1883 # æœåС噍ip
#    username: 2455221 # MQTT-服务端-用户名,后期会修改为用户登录名
#    password: 108295 # MQTT-服务端-密码,,后期会修改为用户登录密码
#    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
#    keepalive: 60 # å¿ƒè·³ ï¼ˆå•位:秒)
#    qos: 1 # å¿ƒè·³åŒ…级别
#    completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
#    clientId: ztns02 # clientId
#    subscribe: /ztt/v3/2455221/publish # è®¢é˜…主题
#    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # æœåС噍ip
  - url: tcp://192.168.21.97:1883 # æœåС噍ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
@@ -199,7 +179,7 @@
    clientId: ztns_gc_scl_108303 # clientId,过程试验室伸长率设备
    subscribe: /aiot/5447dad0-c6b9-11f0-8b13-c14e8310d70b # è®¢é˜…主题
    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # æœåС噍ip
  - url: tcp://192.168.21.97:1883 # æœåС噍ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
@@ -209,23 +189,23 @@
    clientId: ztns_gc_dz_108301 # clientId
    subscribe: /aiot/51eaff10-c6b9-11f0-8b13-c14e8310d70b # è®¢é˜…主题
    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # æœåС噍ip
  - url: tcp://192.168.21.97:1883 # æœåС噍ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
    keepalive: 60 # å¿ƒè·³ ï¼ˆå•位:秒)
    qos: 1 # å¿ƒè·³åŒ…级别
    completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
    clientId: ztns_cp_scl_108295 # clientId,过程试验室伸长率设备
    clientId: ztns_cp_scl_108295 # clientId,成品试验室伸长率设备
    subscribe: /aiot/a4b27900-c6b7-11f0-8b13-c14e8310d70b # è®¢é˜…主题
    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错
  - url: tcp://mqtt.ztt.cn:1883 # æœåС噍ip
  - url: tcp://192.168.21.97:1883 # æœåС噍ip
    username: admin # MQTT-服务端-用户名,后期会修改为用户登录名
    password: public # MQTT-服务端-密码,,后期会修改为用户登录密码
    timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
    keepalive: 60 # å¿ƒè·³ ï¼ˆå•位:秒)
    qos: 1 # å¿ƒè·³åŒ…级别
    completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
    clientId: ztns_cp_dz_108300 # clientId
    clientId: ztns_cp_dz_108300 # clientId,成品试验室电阻
    subscribe: /aiot/4e40cdb0-c6b7-11f0-8b13-c14e8310d70b # è®¢é˜…主题
    client: true # å¦‚果开发需要启动测试,需要改为false不然会一直报错