basic-server/src/main/java/com/ruoyi/basic/dto/StandardTreeTemplateBindingVo.java
@@ -1,12 +1,23 @@ package com.ruoyi.basic.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.ArrayList; import java.util.List; @Data public class StandardTreeTemplateBindingVo { @ApiModelProperty("模æ¿ID") private Integer templateId; @ApiModelProperty("模æ¿åç§°") private String name; @ApiModelProperty("æ£éªé¡¹ç®") private String number; @ApiModelProperty("夿³¨") private String remark; @ApiModelProperty("æåº") private Integer sort; @ApiModelProperty("设å¤IDéå") private List<Integer> deviceIds = new ArrayList<>(); } basic-server/src/main/java/com/ruoyi/basic/dto/TemplateBindingItemDto.java
@@ -1,9 +1,17 @@ package com.ruoyi.basic.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.ArrayList; import java.util.List; @Data public class TemplateBindingItemDto { @ApiModelProperty("模æ¿ID") private Integer templateId; @ApiModelProperty("æåº") private Integer sort; @ApiModelProperty("设å¤IDéå") private List<Integer> deviceIds = new ArrayList<>(); } basic-server/src/main/java/com/ruoyi/basic/mapper/StandardTreeTemplateDeviceMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.ruoyi.basic.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.basic.pojo.StandardTreeTemplateDevice; import org.apache.ibatis.annotations.Param; import java.util.List; /** æ 忍¡æ¿é»è®¤è®¾å¤ Mapperã */ public interface StandardTreeTemplateDeviceMapper extends BaseMapper<StandardTreeTemplateDevice> { List<Integer> selectExistingDeviceIds(@Param("deviceIds") List<Integer> deviceIds); } basic-server/src/main/java/com/ruoyi/basic/pojo/StandardTemplate.java
@@ -6,6 +6,7 @@ import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -73,4 +74,10 @@ */ @ApiModelProperty("模æ¿ç¼å·") private String number; /** * ä»·æ ¼(å ) */ @ApiModelProperty("ä»·æ ¼(å )") private BigDecimal price; } basic-server/src/main/java/com/ruoyi/basic/pojo/StandardTreeTemplateDevice.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ package com.ruoyi.basic.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; /** æ åä¸åå§è®°å½æ¨¡æ¿ä¸é»è®¤è®¾å¤çç»å®å ³ç³»ã */ @Data @TableName("standard_tree_template_device") public class StandardTreeTemplateDevice { @TableId(type = IdType.AUTO) private Integer id; private Integer standardTreeId; private Integer templateId; private Integer deviceId; private Integer sort; @TableField(fill = FieldFill.INSERT) private Integer createUser; @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; } basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java
@@ -244,8 +244,8 @@ @Override public StandardMethodAttachment uploadAttachment(Integer standardMethodId, MultipartFile file) { if (standardMethodMapper.selectById(standardMethodId) == null) throw new BaseException("æ åä¸åå¨"); if (file == null || file.isEmpty() || file.getSize() > 10 * 1024 * 1024) throw new BaseException("éä»¶ä¸è½ä¸ºç©ºä¸ä¸è½è¶ è¿10MB"); if (file == null || file.isEmpty() || file.getSize() > 200L * 1024 * 1024) throw new BaseException("éä»¶ä¸è½ä¸ºç©ºä¸ä¸è½è¶ è¿200MB"); String originalName = file.getOriginalFilename(); if (originalName == null || !originalName.matches("(?i).+\\.(jpg|jpeg|png|gif|doc|docx|xls|xlsx|ppt|pptx|pdf|zip|rar)$")) throw new BaseException("䏿¯æçéä»¶æ ¼å¼"); @@ -391,7 +391,6 @@ } } basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTemplateServiceImpl.java
@@ -50,6 +50,9 @@ StandardTemplate::getNumber); standardTemplate.setNumber(giveCode); } if (standardTemplate.getPrice() == null) { standardTemplate.setPrice(java.math.BigDecimal.ZERO); } if (StringUtils.isNotBlank(standardTemplate.getThing())) { standardTemplate.setThing(GZipUtil.compress(standardTemplate.getThing())); } else { @@ -60,6 +63,9 @@ @Override public int upStandardTemplate(StandardTemplate standardTemplate) { if (standardTemplate.getPrice() == null) { standardTemplate.setPrice(java.math.BigDecimal.ZERO); } if (StringUtils.isNotBlank(standardTemplate.getThing())) { standardTemplate.setThing(GZipUtil.compress(standardTemplate.getThing())); } else { @@ -128,6 +134,9 @@ // æ¥è¯¢æ§æ¨¡æ¿ StandardTemplate standardTemplate = baseMapper.selectById(newTemplate.getId()); newTemplate.setThing(standardTemplate.getThing()); if (newTemplate.getPrice() == null) { newTemplate.setPrice(java.math.BigDecimal.ZERO); } if (StringUtils.isBlank(newTemplate.getNumber())) { String giveCode = numberGenerator.generateNumberWithPrefix(5, basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
@@ -18,6 +18,7 @@ import com.ruoyi.basic.mapper.StandardProductListMapper; import com.ruoyi.basic.mapper.StandardTreeMapper; import com.ruoyi.basic.mapper.StandardTreeTemplateBindingMapper; import com.ruoyi.basic.mapper.StandardTreeTemplateDeviceMapper; import com.ruoyi.basic.mapper.StructureItemParameterMapper; import com.ruoyi.basic.mapper.StructureTestObjectMapper; import com.ruoyi.basic.pojo.Laboratory; @@ -25,6 +26,7 @@ import com.ruoyi.basic.pojo.StandardTree; import com.ruoyi.basic.pojo.StandardTemplate; import com.ruoyi.basic.pojo.StandardTreeTemplateBinding; import com.ruoyi.basic.pojo.StandardTreeTemplateDevice; import com.ruoyi.basic.pojo.StructureItemParameter; import com.ruoyi.basic.pojo.StructureTestObject; import com.ruoyi.basic.service.StandardTreeService; @@ -45,6 +47,7 @@ import java.util.HashSet; import java.util.Comparator; import java.util.Set; import java.util.stream.Collectors; /** * @author Administrator @@ -68,6 +71,8 @@ private LaboratoryMapper laboratoryMapper; private StandardTreeTemplateBindingMapper standardTreeTemplateBindingMapper; private StandardTreeTemplateDeviceMapper standardTreeTemplateDeviceMapper; private StandardTemplateService standardTemplateService; @@ -204,6 +209,8 @@ } standardTreeTemplateBindingMapper.delete(Wrappers.<StandardTreeTemplateBinding>lambdaQuery() .eq(StandardTreeTemplateBinding::getStandardTreeId, standardTree.getId())); standardTreeTemplateDeviceMapper.delete(Wrappers.<StandardTreeTemplateDevice>lambdaQuery() .eq(StandardTreeTemplateDevice::getStandardTreeId, standardTree.getId())); standardTreeMapper.deleteById(standardTree.getId()); standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaQuery() .eq(StandardProductList::getLaboratory, industry) @@ -384,6 +391,15 @@ Wrappers.<StandardTreeTemplateBinding>lambdaQuery() .eq(StandardTreeTemplateBinding::getStandardTreeId, standardTreeId) .orderByAsc(StandardTreeTemplateBinding::getSort, StandardTreeTemplateBinding::getId)); Map<Integer, List<Integer>> deviceIdsByTemplate = standardTreeTemplateDeviceMapper.selectList( Wrappers.<StandardTreeTemplateDevice>lambdaQuery() .eq(StandardTreeTemplateDevice::getStandardTreeId, standardTreeId) .orderByAsc(StandardTreeTemplateDevice::getSort, StandardTreeTemplateDevice::getId)) .stream().collect(Collectors.groupingBy( StandardTreeTemplateDevice::getTemplateId, LinkedHashMap::new, Collectors.mapping(StandardTreeTemplateDevice::getDeviceId, Collectors.toList()))); List<StandardTreeTemplateBindingVo> result = new ArrayList<>(); for (StandardTreeTemplateBinding binding : bindings) { StandardTemplate template = standardTemplateService.getById(binding.getTemplateId()); @@ -396,6 +412,7 @@ vo.setNumber(template.getNumber()); vo.setRemark(template.getRemark()); vo.setSort(binding.getSort()); vo.setDeviceIds(deviceIdsByTemplate.getOrDefault(template.getId(), new ArrayList<>())); result.add(vo); } return result; @@ -410,6 +427,7 @@ ensureTwoLevelStandard(dto.getStandardTreeId()); List<TemplateBindingItemDto> templates = dto.getTemplates() == null ? new ArrayList<>() : dto.getTemplates(); Set<Integer> templateIds = new HashSet<>(); Set<Integer> allDeviceIds = new HashSet<>(); List<StandardTreeTemplateBinding> bindings = new ArrayList<>(); int index = 0; for (TemplateBindingItemDto item : templates) { @@ -425,12 +443,38 @@ binding.setTemplateId(item.getTemplateId()); binding.setSort(item.getSort() == null ? index : item.getSort()); bindings.add(binding); if (item.getDeviceIds() != null) { allDeviceIds.addAll(item.getDeviceIds().stream() .filter(Objects::nonNull).collect(Collectors.toSet())); } index++; } if (!allDeviceIds.isEmpty()) { List<Integer> requestedDeviceIds = new ArrayList<>(allDeviceIds); if (standardTreeTemplateDeviceMapper.selectExistingDeviceIds(requestedDeviceIds).size() != requestedDeviceIds.size()) { throw new BaseException("æé设å¤ä¸åå¨ï¼è¯·å·æ°è®¾å¤å表åéè¯"); } } standardTreeTemplateDeviceMapper.delete(Wrappers.<StandardTreeTemplateDevice>lambdaQuery() .eq(StandardTreeTemplateDevice::getStandardTreeId, dto.getStandardTreeId())); standardTreeTemplateBindingMapper.delete(Wrappers.<StandardTreeTemplateBinding>lambdaQuery() .eq(StandardTreeTemplateBinding::getStandardTreeId, dto.getStandardTreeId())); for (StandardTreeTemplateBinding binding : bindings) { for (int bindingIndex = 0; bindingIndex < bindings.size(); bindingIndex++) { StandardTreeTemplateBinding binding = bindings.get(bindingIndex); standardTreeTemplateBindingMapper.insert(binding); TemplateBindingItemDto item = templates.get(bindingIndex); List<Integer> deviceIds = item.getDeviceIds() == null ? new ArrayList<>() : item.getDeviceIds().stream().filter(Objects::nonNull).distinct() .collect(Collectors.toList()); for (int deviceIndex = 0; deviceIndex < deviceIds.size(); deviceIndex++) { StandardTreeTemplateDevice relation = new StandardTreeTemplateDevice(); relation.setStandardTreeId(dto.getStandardTreeId()); relation.setTemplateId(item.getTemplateId()); relation.setDeviceId(deviceIds.get(deviceIndex)); relation.setSort(deviceIndex); standardTreeTemplateDeviceMapper.insert(relation); } } return true; } basic-server/src/main/resources/mapper/StandardTemplateMapper.xml
@@ -17,7 +17,7 @@ <select id="selectStandardTemplatePageList" resultType="com.ruoyi.basic.pojo.StandardTemplate"> select * from ( select st.id, st.name,st.number, st.remark, u2.name create_user_name, u3.name update_user_name, st.create_time, st.update_time select st.id, st.name,st.number, st.price, st.remark, u2.name create_user_name, u3.name update_user_name, st.create_time, st.update_time from standard_template st left join user u2 on u2.id = st.create_user left join user u3 on u3.id = st.update_user basic-server/src/main/resources/mapper/StandardTreeTemplateDeviceMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ <?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.basic.mapper.StandardTreeTemplateDeviceMapper"> <select id="selectExistingDeviceIds" resultType="java.lang.Integer"> select id from device where id in <foreach collection='deviceIds' item='deviceId' open='(' separator=',' close=')'> #{deviceId} </foreach> </select> </mapper> inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderRatesController.java
@@ -2,11 +2,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.Result; import com.ruoyi.inspect.dto.SampleOrderDto; import com.ruoyi.inspect.pojo.InsOrderRates; import com.ruoyi.inspect.service.InsOrderRatesService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -51,8 +49,7 @@ @ApiOperation(value = "æ¥è¯¢è®¢åè´¹ç¨è¯¦æ ") @GetMapping("/selectRatesDetail") public Result selectRatesDetail(Page page, Integer insOrderId) { return Result.success(insOrderRatesService.page(page, Wrappers.<InsOrderRates>lambdaQuery() .eq(InsOrderRates::getInsOrderId, insOrderId))); return Result.success(insOrderRatesService.selectTemplateRatesDetail(page, insOrderId)); } } inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportController.java
@@ -10,6 +10,7 @@ import com.ruoyi.common.core.domain.Result; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.dto.ReportPageDto; import com.ruoyi.inspect.service.InsOrderPlanService; import com.ruoyi.inspect.service.InsReportService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -37,6 +38,9 @@ @Resource private InsReportService insReportService; @Resource private InsOrderPlanService insOrderPlanService; @Value("${wordUrl}") private String wordUrl; @@ -150,12 +154,21 @@ return Result.success(insReportService.downAll(ids)); } @ApiOperation(value = "æ¥åä¸è½½") @ApiOperation(value = "æ¥åä¸è½½ï¼reportTypeï¼0æ£æµæ¥åï¼1æ£éªæ¥åï¼") @GetMapping("/download") @PreAuthorize("@ss.hasPermi('business:reportPreparation')") @PersonalScope(permsName = "business:reportPreparation", objectName = ReportPageDto.class, paramName = "createOrderUser") public void download(Integer id, ReportPageDto reportPageDto, HttpServletResponse response) { insReportService.download(id, reportPageDto.getCreateOrderUser(), response); public void download(Integer id, Integer reportType, ReportPageDto reportPageDto, HttpServletResponse response) { insReportService.download(id, reportType, reportPageDto.getCreateOrderUser(), response); } @ApiOperation(value = "éæ°çææ¥å") @PostMapping("/regenerate") // @PreAuthorize("@ss.hasPermi('business:reportPreparation')") @PersonalScope(permsName = "business:reportPreparation", objectName = ReportPageDto.class, paramName = "createOrderUser") public Result regenerate(@RequestBody ReportPageDto reportPageDto) { insOrderPlanService.regenerateReport(reportPageDto.getId(), reportPageDto.getCreateOrderUser()); return Result.success(); } @ApiOperation(value = "æ¥åæ¹éä¸ä¼ ") inspect-server/src/main/java/com/ruoyi/inspect/dto/TemplateRateDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.inspect.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class TemplateRateDto { @ApiModelProperty("æ£éªé¡¹ç®") private String number; @ApiModelProperty("模æ¿åç§°") private String name; @ApiModelProperty("ä»·æ ¼(å )") private BigDecimal price; } inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
@@ -42,6 +42,10 @@ String getStandardMethodCode(@Param("id") Integer id); String getStandardMethodReportText(@Param("id") Integer id); String getStandardMethodReportTextByCode(@Param("code") String code); int updateStatus(@Param("id") Integer id); String selLaboratoryCode(@Param("laboratory") String laboratory); inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderRatesMapper.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.inspect.dto.SampleOrderDto; import com.ruoyi.inspect.dto.TemplateRateDto; import com.ruoyi.inspect.pojo.InsOrderRates; import org.apache.ibatis.annotations.Param; @@ -21,5 +22,11 @@ * @return */ IPage<SampleOrderDto> selectInsOrderRates(Page page, @Param("ew") QueryWrapper<SampleOrderDto> ew); /** * æ¥è¯¢è®¢åè´¹ç¨è¯¦æ ï¼æ¨¡æ¿ä»·æ ¼ï¼ * @return */ IPage<TemplateRateDto> selectTemplateRatesDetail(Page page, @Param("insOrderId") Integer insOrderId); } inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReport.java
@@ -41,6 +41,12 @@ private String url; /** * ç³»ç»çæçæ£éªæ¥åå°åï¼ä¸ url 对åºçæ£æµæ¥åå ±ç¨å䏿¡å®¡æ¹è®°å½ã */ @ApiModelProperty("æ£éªæ¥åå°å") private String inspectionUrl; /** * æå¨ä¸ä¼ æ¥åå°å */ @ApiModelProperty("å建æ¶é´") inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderPlanService.java
@@ -59,6 +59,11 @@ int rawMaterialVerifyPlan(VerifyPlanDto verifyPlanDto); /** * æå½åæ£éªæ°æ®éæ°çæå°æªæ¹åçç³»ç»æ¥åã */ void regenerateReport(Integer reportId, Integer createOrderUser); /** * çµç¼é ç½®. æ¥çæ è¯ * @param id * @param laboratory inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderRatesService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.inspect.dto.SampleOrderDto; import com.ruoyi.inspect.dto.TemplateRateDto; import com.ruoyi.inspect.pojo.InsOrderRates; /** @@ -21,5 +22,13 @@ * @return */ IPage<SampleOrderDto> selectInsOrderRates(Page page, SampleOrderDto sampleOrderDto); /** * æ¥è¯¢è®¢åè´¹ç¨è¯¦æ ï¼æ¨¡æ¿ä»·æ ¼ï¼ * @param page * @param insOrderId * @return */ IPage<TemplateRateDto> selectTemplateRatesDetail(Page page, Integer insOrderId); } inspect-server/src/main/java/com/ruoyi/inspect/service/InsReportService.java
@@ -41,8 +41,10 @@ String downAll(String ids); /** å份æ¥å Word ä¸è½½ï¼createOrderUser ç¨äºå¤ç¨æ¥åç¼å¶çæ°æ®èå´ã */ void download(Integer id, Integer createOrderUser, HttpServletResponse response); /** * å份æ¥å Word ä¸è½½ï¼reportTypeï¼0æ£æµæ¥åï¼1æ£éªæ¥åï¼createOrderUser ç¨äºå¤ç¨æ¥åç¼å¶çæ°æ®èå´ã */ void download(Integer id, Integer reportType, Integer createOrderUser, HttpServletResponse response); int upAll(MultipartFile file) throws IOException; inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -46,6 +46,7 @@ import com.ruoyi.inspect.service.*; import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; import com.ruoyi.inspect.util.PreserveReportPicturePlaceholderHandler; import com.ruoyi.inspect.util.ReportSignaturePictureUtils; import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo; import com.ruoyi.inspect.vo.InsOrderPlanVO; import com.ruoyi.inspect.vo.InsSampleUserVO; @@ -178,8 +179,12 @@ String userName = null; Integer userId = null; if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) { userId = SecurityUtils.getUserId().intValue(); userName = userMapper.selectById(userId).getName(); Integer currentUserId = SecurityUtils.getUserId().intValue(); // 管çåå¯ä»¥æ¥ç并夿 ¸å ¨é¨å¾ 夿 ¸ä»»å¡ï¼æ®éç¨æ·ä»åªæ¥çåé ç»èªå·±çä»»å¡ã if (!SecurityUtils.isAdmin(currentUserId.longValue())) { userId = currentUserId; userName = userMapper.selectById(userId).getName(); } insOrderPlanDTO.setUserId(null); } Integer isCheck = insOrderPlanDTO.getIsCheck(); @@ -745,18 +750,9 @@ } catch (Exception ignored) { thing = compressedThing; } JSONArray cellData = JSON.parseObject(thing).getJSONArray("data").getJSONObject(0).getJSONArray("celldata"); JSONObject sheet = JSON.parseObject(thing).getJSONArray("data").getJSONObject(0); JSONArray cellData = sheet.getJSONArray("celldata"); NavigableMap<Integer, List<String>> result = new TreeMap<>(); Integer inspectionResultColumn = null; for (Object item : cellData) { JSONObject cell = JSON.parseObject(JSON.toJSONString(item)); Integer column = cell.getInteger("c"); JSONObject value = cell.getJSONObject("v"); String displayValue = value == null ? null : value.getString("v"); if (inspectionResultColumn == null && "æ£éªç»æ".equals(StringUtils.trim(displayValue))) { inspectionResultColumn = column; } } for (Object item : cellData) { JSONObject cell = JSON.parseObject(JSON.toJSONString(item)); JSONObject value = cell.getJSONObject("v"); @@ -767,16 +763,119 @@ Integer row = cell.getInteger("r"); Integer column = cell.getInteger("c"); if (row != null && column != null) { // â导åºå¼âæ 卿£æµé¡¹ç®æ é¢åå æ ¼æ¶ï¼çæ£å¯¼åºç弿¯åä¸è¡âæ£éªç»æâåçåå æ ¼ã String coordinate = row + "-" + column; String resultCoordinate = row + "-" + inspectionResultColumn; if (inspectionResultColumn != null && !Objects.equals(column, inspectionResultColumn)) { coordinate = resultCoordinate; } // æ¹æ³¨åå æ ¼å¯è½æ¨ªååå¹¶ï¼å³ä¾§ç»æåå æ ¼ä¹å¯è½çºµååå¹¶ï¼æç»è¯»åç»æåºåçå·¦ä¸è§åå¨åæ ã String coordinate = getRightAdjacentCoordinate(sheet, row, column); result.computeIfAbsent(row, ignored -> new ArrayList<>()).add(coordinate); } } return result; } /** * è¿åæå®åå æ ¼ï¼æå ¶æå¨åå¹¶åºåï¼å³ä¾§ç´§é»åç䏿 ã * Luckysheet çåå¹¶ä¿¡æ¯é常ä¿åå¨ config.mergeï¼é¨åå岿¨¡æ¿åªå¨åå æ ¼ v.mc ä¸ä¿çï¼ * å æ¤ä¸¤ç§ç»æé½è¦å ¼å®¹ã */ private int getRightAdjacentColumn(JSONObject sheet, int row, int column) { int rightEdge = column; JSONObject config = sheet == null ? null : sheet.getJSONObject("config"); JSONObject merges = config == null ? null : config.getJSONObject("merge"); if (merges != null) { for (Object rawMerge : merges.values()) { rightEdge = extendMergedRightEdge(rightEdge, row, column, rawMerge); } } JSONArray cellData = sheet == null ? null : sheet.getJSONArray("celldata"); if (cellData != null) { for (Object rawCell : cellData) { JSONObject cell = JSON.parseObject(JSON.toJSONString(rawCell)); JSONObject value = cell == null ? null : cell.getJSONObject("v"); JSONObject merge = value == null ? null : value.getJSONObject("mc"); rightEdge = extendMergedRightEdge(rightEdge, row, column, merge); } } return rightEdge + 1; } private String getRightAdjacentCoordinate(JSONObject sheet, int row, int column) { int adjacentColumn = getRightAdjacentColumn(sheet, row, column); int[] anchor = findMergedAnchor(sheet, row, adjacentColumn); return anchor[0] + "-" + anchor[1]; } /** * Luckysheet åªå¨åå¹¶åºåå·¦ä¸è§ä¿åå®é å¼ãè¥ç®æ åå æ ¼ä½äºåå¹¶åºåå é¨ï¼ * å°å ¶è½¬æ¢ä¸ºè¯¥åºåçå·¦ä¸è§åæ ï¼æªåå¹¶åè¿åååæ ã */ private int[] findMergedAnchor(JSONObject sheet, int row, int column) { JSONObject config = sheet == null ? null : sheet.getJSONObject("config"); JSONObject merges = config == null ? null : config.getJSONObject("merge"); if (merges != null) { for (Object rawMerge : merges.values()) { int[] anchor = findMergedAnchor(row, column, rawMerge); if (anchor != null) { return anchor; } } } JSONArray cellData = sheet == null ? null : sheet.getJSONArray("celldata"); if (cellData != null) { for (Object rawCell : cellData) { JSONObject cell = JSON.parseObject(JSON.toJSONString(rawCell)); JSONObject value = cell == null ? null : cell.getJSONObject("v"); int[] anchor = findMergedAnchor(row, column, value == null ? null : value.getJSONObject("mc")); if (anchor != null) { return anchor; } } } return new int[]{row, column}; } private int[] findMergedAnchor(int row, int column, Object rawMerge) { if (rawMerge == null) { return null; } JSONObject merge = rawMerge instanceof JSONObject ? (JSONObject) rawMerge : JSON.parseObject(JSON.toJSONString(rawMerge)); Integer startRow = merge.getInteger("r"); Integer startColumn = merge.getInteger("c"); Integer rowSpan = merge.getInteger("rs"); Integer columnSpan = merge.getInteger("cs"); if (startRow == null || startColumn == null || rowSpan == null || columnSpan == null || rowSpan < 1 || columnSpan < 1) { return null; } if (row >= startRow && row < startRow + rowSpan && column >= startColumn && column < startColumn + columnSpan) { return new int[]{startRow, startColumn}; } return null; } private int extendMergedRightEdge(int currentRightEdge, int row, int column, Object rawMerge) { if (rawMerge == null) { return currentRightEdge; } JSONObject merge = rawMerge instanceof JSONObject ? (JSONObject) rawMerge : JSON.parseObject(JSON.toJSONString(rawMerge)); Integer startRow = merge.getInteger("r"); Integer startColumn = merge.getInteger("c"); Integer rowSpan = merge.getInteger("rs"); Integer columnSpan = merge.getInteger("cs"); if (startRow == null || startColumn == null || rowSpan == null || columnSpan == null || rowSpan < 1 || columnSpan < 1) { return currentRightEdge; } int endRow = startRow + rowSpan - 1; int endColumn = startColumn + columnSpan - 1; if (row >= startRow && row <= endRow && column >= startColumn && column <= endColumn) { return Math.max(currentRightEdge, endColumn); } return currentRightEdge; } /** @@ -794,7 +893,7 @@ } /** * ç´ç»æ¨¡æ¿è®¢ååªæ ¡éªæ¨¡æ¿ä¸æ 记为â导åºå¼âçåå æ ¼ï¼ä¸ä½¿ç¨æ£éªé¡¹ç¶ææ last_value å¤å®ã * ç´ç»æ¨¡æ¿è®¢ååªæ ¡éªæ¯ä¸ªâ导åºå¼âæ¹æ³¨æå¨åºåå³ä¾§ç´§é»åå æ ¼ï¼ä¸ä½¿ç¨æ£éªé¡¹ç¶ææ last_value å¤å®ã */ private List<String> getMissingTemplateExportValues(Integer orderId) { List<InsOrderStandardTemplate> snapshots = insOrderStandardTemplateService.list( @@ -1119,13 +1218,12 @@ .last("FOR UPDATE")); boolean isInspectionReport = Objects.equals(INSPECTION_REPORT, reportType); registerInsResults = isInspectionReport && Boolean.TRUE.equals(registerInsResults); // 1. 夿æ¯å¦æéå¤ç¼å·, æéå¤ç¼å·åæé // 1. å§æç¼å·å ¨å±å¯ä¸ï¼æäº¤å¤æ ¸æ¶åæ¬¡æ ¡éªï¼é²æ¢å¹¶åæå岿°æ®ç»è¿çææ ¡éªã Long codeCount = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery() .ne(InsOrder::getState, -1) .ne(InsOrder::getIfsInventoryId, order.getIfsInventoryId()) .ne(InsOrder::getId, orderId) .eq(InsOrder::getEntrustCode, order.getEntrustCode())); if (codeCount > 0) { throw new ErrorException("å½åç¼å·æéå¤, 请å å»ä¿®æ¹éå¤ç¼å·"); throw new ErrorException("æ ·å/å§æåå·²åå¨ï¼è¯·ç¡®è®¤æ ·åç¼å·"); } // 2. å¤æè¯¥è®¢åæ¯å¦æ¯ç¬¬ä¸æ¬¡ç产(åç»æ¥åçæåªåç¬¬ä¸æ¬¡æäº¤æ¶é´) @@ -1532,6 +1630,10 @@ refreshed.setRecordValues(templateRecordValuesMap.get(templateId)); refreshed.setTemperature(templateTemperatureMap.get(templateId)); refreshed.setHumidity(templateHumidityMap.get(templateId)); // å·æ°æ¨¡æ¿ç»ææ¶å¿ é¡»ä¿çæ£éªé¶æ®µå¡«åçä¸å¡æ°æ®ï¼é¿å è¿å ¥å¤æ ¸ååæ¾ä¸ºç©ºã refreshed.setDetectionTime(oldSnapshot == null ? null : oldSnapshot.getDetectionTime()); refreshed.setDetectionPlace(oldSnapshot == null ? null : oldSnapshot.getDetectionPlace()); refreshed.setInsResult(oldSnapshot == null ? null : oldSnapshot.getInsResult()); Integer templateSort = templateSortMap.get(templateId); refreshed.setSort(templateSort == null ? nextTemplateSort++ : templateSort); refreshedSnapshots.add(refreshed); @@ -1586,12 +1688,13 @@ InsReport existingReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery() .eq(InsReport::getInsOrderId, orderId) .last("limit 1")); boolean directTemplateOrder = isDirectTemplateOrder(orderId); if (currentState != null && Objects.equals(currentState.getInsState(), 5) && existingReport != null && StringUtils.isNotBlank(existingReport.getUrl())) { && existingReport != null && StringUtils.isNotBlank(existingReport.getUrl()) && (!directTemplateOrder || StringUtils.isNotBlank(existingReport.getInspectionUrl()))) { // 鲿¢å¤æ ¸é¡µé¢éå¤ç¹å»æç½ç»éè¯éå¤çææ¥åãéå¤åèµ·æ¥å审æ¹ã return 1; } boolean directTemplateOrder = isDirectTemplateOrder(orderId); if (directTemplateOrder && Objects.equals(type, 1) && !Objects.equals(dto.getInsResult(), 0) && !Objects.equals(dto.getInsResult(), 1)) { throw new ErrorException("è¯·éæ©æ£éªåç»è®º"); @@ -1640,15 +1743,22 @@ .eq(InsOrder::getId, orderId) .set(InsOrder::getInsState, 5)); // æ£éªäººåæäº¤å¤æ ¸æ¶ä¸åçææ¥åï¼ä» å¨å ¨é¨è¯éªå®¤å¤æ ¸éè¿åçææ£æµæ¥åã // æ£éªäººåæäº¤å¤æ ¸æ¶ä¸çææ¥åï¼å ¨é¨è¯éªå®¤å¤æ ¸éè¿åçææ¥åã if (report == null || StringUtils.isBlank(report.getUrl())) { this.generateReport(orderId, DETECTION_REPORT, writeUserId); report = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery() .eq(InsReport::getInsOrderId, orderId) .last("limit 1")); } // ç´ç»æ¨¡æ¿è®¢ååæ¶çææ£éªæ¥åï¼ä¸¤ä»½æä»¶å ±ç¨å䏿¡å®¡æ¹è®°å½ã if (directTemplateOrder && (report == null || StringUtils.isBlank(report.getInspectionUrl()))) { this.generateReport(orderId, INSPECTION_REPORT, writeUserId); } report = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery() .eq(InsReport::getInsOrderId, orderId) .last("limit 1")); if (report == null || StringUtils.isBlank(report.getUrl())) { throw new ErrorException("æ£æµæ¥åçæå¤±è´¥"); } if (directTemplateOrder && StringUtils.isBlank(report.getInspectionUrl())) { throw new ErrorException("æ£éªæ¥åçæå¤±è´¥"); } if (report.getTempUrlPdf() == null) { String tempUrlPdf = this.wordToPdfTemp(report.getUrl().replace("/word", wordUrl)); @@ -1798,6 +1908,101 @@ throw new ErrorException("æ¾ä¸å°å½åæ£éªä»»å¡çæ£éªäººï¼æ æ³çææ£æµæ¥å"); } return inspector.getUserId(); } /** * éæ°çæå°æªæ¹åçç³»ç»æ¥åï¼å¹¶æ¢å¤å·²åå¨çç¼å¶ãå®¡æ ¸ç¾åã */ @Override @Transactional(rollbackFor = Exception.class) public void regenerateReport(Integer reportId, Integer createOrderUser) { if (reportId == null) { throw new ErrorException("æ¥åä¸è½ä¸ºç©º"); } InsReport accessibleReport = insReportMapper.selectDownloadableReport(reportId, createOrderUser); if (accessibleReport == null) { throw new ErrorException("æ¥åä¸åå¨ãå°æªçæææ ææä½"); } // æ°æ®åºè¡éé¿å å䏿¥å被å¤äººåæ¶éæ°çæå¹¶è¦çã InsReport report = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery() .eq(InsReport::getId, reportId) .last("FOR UPDATE")); if (report == null) { throw new ErrorException("æ¥åä¸åå¨"); } if (Objects.equals(report.getIsRatify(), 1)) { throw new ErrorException("å·²æ¹åæ¥åä¸è½éæ°çæ"); } if (StringUtils.isNotBlank(report.getUrlS())) { throw new ErrorException("å½åæ¥åå·²æå¨ä¸ä¼ ï¼è¯·å è¿åä¸ºç³»ç»æ¥åååéæ°çæ"); } if (report.getInsOrderId() == null) { throw new ErrorException("æ¥åæªå ³èæ£éªåï¼æ æ³éæ°çæ"); } Integer reportType = report.getReportType() == null ? DETECTION_REPORT : report.getReportType(); Integer writeUserId = report.getWriteUserId() == null ? SecurityUtils.getUserId().intValue() : report.getWriteUserId(); boolean directTemplateOrder = isDirectTemplateOrder(report.getInsOrderId()); if (directTemplateOrder) { generateReport(report.getInsOrderId(), DETECTION_REPORT, writeUserId); generateReport(report.getInsOrderId(), INSPECTION_REPORT, writeUserId); } else { generateReport(report.getInsOrderId(), reportType, writeUserId); } InsReport regenerated = insReportMapper.selectById(reportId); if (regenerated == null || StringUtils.isBlank(regenerated.getUrl())) { throw new ErrorException("æ¥åéæ°çæå¤±è´¥"); } if (directTemplateOrder && StringUtils.isBlank(regenerated.getInspectionUrl())) { throw new ErrorException("æ£éªæ¥åéæ°çæå¤±è´¥"); } String reportPath = regenerated.getUrl().replace("/word", wordUrl); Map<String, Object> marks = buildExistingReportMarks(report); if (!marks.isEmpty()) { insReportService.wordInsertUrl(marks, reportPath); if (StringUtils.isNotBlank(regenerated.getInspectionUrl())) { insReportService.wordInsertUrl(marks, regenerated.getInspectionUrl().replace("/word", wordUrl)); } } String tempPdfName = wordToPdfTemp(reportPath); if (StringUtils.isBlank(tempPdfName)) { throw new ErrorException("æ¥åé¢è§æä»¶çæå¤±è´¥"); } // generateReport ä¼åå ¥å½åæ¶é´ï¼éæ°çæä¸åºæ¹åå审æ¹è®°å½æ¶é´ã insReportMapper.update(null, Wrappers.<InsReport>lambdaUpdate() .eq(InsReport::getId, reportId) .set(InsReport::getWriteTime, report.getWriteTime()) .set(InsReport::getTempUrlPdf, "/word/" + tempPdfName)); } private Map<String, Object> buildExistingReportMarks(InsReport report) { Map<String, Object> marks = new HashMap<>(); boolean submitted = Objects.equals(report.getState(), 1) || report.getIsExamine() != null || report.getExamineTime() != null; if (submitted) { User writer = getReportSigner(report.getWriteUserId(), "ç¼å¶äºº"); marks.put("writeUrl", ReportSignaturePictureUtils.create(imgUrl, writer.getSignatureUrl())); marks.put("writeDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(report.getWriteTime())).create()); marks.put("insUrl", ReportSignaturePictureUtils.create(imgUrl, writer.getSignatureUrl())); } if (Objects.equals(report.getIsExamine(), 1)) { User examiner = getReportSigner(report.getExamineUserId(), "å®¡æ ¸äºº"); marks.put("examineUrl", ReportSignaturePictureUtils.create(imgUrl, examiner.getSignatureUrl())); marks.put("examineDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(report.getExamineTime())).create()); } return marks; } private User getReportSigner(Integer userId, String roleName) { User user = userId == null ? null : userMapper.selectById(userId); if (user == null || StringUtils.isBlank(user.getSignatureUrl())) { throw new ErrorException("æ¾ä¸å°" + roleName + "çç¾å"); } return user; } /** @@ -2331,13 +2536,18 @@ enterFactoryReport.setLotBatchNo(ifsInventoryQuantity.getUpdateBatchNo()); // æ£æµä¾æ® Set<String> standardMethod = new HashSet<>(); Set<String> standardMethod = new LinkedHashSet<>(); StringBuilder standardMethod2 = new StringBuilder(); standardMethod.add(baseMapper.getStandardMethodCode(insSample.getStandardMethodListId())); String reportStandardMethod = baseMapper.getStandardMethodReportText(insSample.getStandardMethodListId()); if (StringUtils.isNotBlank(reportStandardMethod)) { standardMethod.add(reportStandardMethod); } for (String s : standardMethod) { standardMethod2.append("ã").append(s); } standardMethod2.replace(0, 1, ""); if (standardMethod2.length() > 0) { standardMethod2.deleteCharAt(0); } // æ ·åç±»å String orderType = iSysDictTypeService.selectLabelByDict(DictDataConstants.CHECK_TYPE, insOrder.getOrderType()); @@ -3009,7 +3219,7 @@ insReport.setReportType(reportType); boolean showResult = Objects.equals(reportType, INSPECTION_REPORT); List<Map<String, Object>> tables = new ArrayList<>(); Set<String> standardMethod = new HashSet<>(); Set<String> standardMethod = new LinkedHashSet<>(); Set<String> deviceSet = new HashSet<>(); Set<String> models = new HashSet<>(); // æ¥è¯¢æ£éªé¡¹æ°é @@ -3022,11 +3232,13 @@ /*åºç¡æ¥å(æ ¹æ®ç»å¶çåå§è®°å½æ¨¡çå½¢æ)*/ samples.forEach(a -> { models.add(a.getModel()); String standardMethodCode = baseMapper.getStandardMethodCode(a.getStandardMethodListId()); if (StrUtil.isNotBlank(a.getSpecialStandardMethod())) { standardMethodCode = standardMethodCode + "+" + a.getSpecialStandardMethod(); String standardMethodCode = baseMapper.getStandardMethodReportText(a.getStandardMethodListId()); if (StrUtil.isNotBlank(standardMethodCode)) { if (StrUtil.isNotBlank(a.getSpecialStandardMethod())) { standardMethodCode = standardMethodCode + "+" + a.getSpecialStandardMethod(); } standardMethod.add(standardMethodCode); } standardMethod.add(standardMethodCode); for (InsProduct b : a.getInsProduct()) { if (b.getInsProductResult() != null) { List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class); @@ -3038,9 +3250,9 @@ } } } // æ°çæ£æµæ¥åç´æ¥ä½¿ç¨åºå®ååç»æè¡ï¼ä¸åæé æ§çå¯åå TableRenderDataã // æ£éªæ¥å仿²¿ç¨ä¸æ¹åæçå¤§è¡¨æ ¼é»è¾ã if (!showResult) { // ç´ç»æ¨¡æ¿çæ£æµæ¥åãæ£éªæ¥åé½ä½¿ç¨æ°çåºå®ç»æè¡ï¼ä¸åè¿å ¥æ§çæ£éªé¡¹è¡¨æ ¼é»è¾ã // ç´ç»æ¨¡æ¿ä¸çæ¿è½½è®°å½æ²¡ææ§æ£éªé¡¹å段ï¼è¿å ¥æ§é»è¾ä¼å¨æ ¼å¼åæ¶äº§ç空æéã if (!showResult || directTemplateOrder) { return; } // æ¶æ ·æ¥æ @@ -3372,9 +3584,14 @@ if (firstInspectDate == null) { firstInspectDate = insOrder.getSendTime(); } if (firstInspectDate == null) { firstInspectDate = submitTime; } String insTime = firstInspectDate.format(DateTimeFormatter.ofPattern("yyyyå¹´MMæddæ¥")) + "-" + submitTime.format(DateTimeFormatter.ofPattern("yyyyå¹´MMæddæ¥")); String testStartDate = firstInspectDate.format(DateTimeFormatter.ofPattern("yyyyå¹´MMæddæ¥")); String testEndDate = submitTime.format(DateTimeFormatter.ofPattern("yyyyå¹´MMæddæ¥")); String insTimeEn = monthNames[firstInspectDate.getMonthValue() - 1] + " " + firstInspectDate.format(DateTimeFormatter.ofPattern("dd, yyyy")) + "-" + monthNames[submitTime.getMonthValue() - 1] + " " + submitTime.format(DateTimeFormatter.ofPattern("dd, yyyy")); @@ -3431,11 +3648,8 @@ productionDate = insOrder.getProductionDate().format(DateTimeFormatter.ofPattern("yyyyå¹´MMæddæ¥")); } batchNo = defaultReportText(insOrder.getProductionBatch(), "/"); standardMethodText = templateSnapshots.stream() .map(InsOrderStandardTemplate::getRemark) .filter(StringUtils::isNotBlank) .distinct() .collect(Collectors.joining("ï¼")); standardMethodText = defaultReportText( baseMapper.getStandardMethodReportTextByCode(insOrder.getSample()), insOrder.getSample()); } boolean containsOrganicChlorine = detectionResultRows.stream() .map(row -> row.get("itemName")) @@ -3445,8 +3659,9 @@ ? "å¾®åºä»æ³ï¼ææºæ°¯å«éå°äº0.005%æ¶ï¼ä»¥æªæ£åºæ¥åºã" : defaultReportText(insOrder.getRemark(), "/"); // æ£æµæ¥ååæ£éªæ¥åç»ä¸ä½¿ç¨æ°çæ¥åæ¨¡æ¿ String templateName = "/static/detection-report-template-v2.docx"; String templateName = showResult ? "/static/inspection-report-template-v2.docx" : "/static/detection-report-template-v2.docx"; InputStream inputStream = this.getClass().getResourceAsStream(templateName); if (inputStream == null) { throw new RuntimeException("æ¾ä¸å°æ¥å模æ¿: " + templateName); @@ -3523,6 +3738,8 @@ put("batch", finalBatchNo); put("phone", defaultReportText(insOrder.getPhone(), "/")); put("testDate", insTime); put("testStartDate", testStartDate); put("testEndDate", testEndDate); put("entrustNo", defaultReportText(insOrder.getEntrustCode(), "/")); put("sampling", "/"); put("standard", finalStandardMethodText); @@ -3533,7 +3750,7 @@ put("resultNote", finalResultRemark); }}); try { String name = insReport.getCode().replace("/", "") + (showResult ? ".docx" : "-C.docx"); String name = insReport.getCode().replace("/", "") + (showResult ? "-J.docx" : "-C.docx"); Files.createDirectories(Paths.get(wordUrl)); template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl, name))); insReport.setUrl("/word/" + name); @@ -3550,6 +3767,22 @@ InsReport existing = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery() .eq(InsReport::getInsOrderId, report.getInsOrderId()) .last("limit 1")); if (Objects.equals(report.getReportType(), INSPECTION_REPORT)) { String inspectionUrl = report.getUrl(); if (existing == null) { report.setReportType(DETECTION_REPORT); report.setUrl(null); report.setInspectionUrl(inspectionUrl); insReportMapper.insert(report); } else { insReportMapper.update(null, Wrappers.<InsReport>lambdaUpdate() .eq(InsReport::getId, existing.getId()) .set(InsReport::getInspectionUrl, inspectionUrl) .set(InsReport::getWriteUserId, report.getWriteUserId()) .set(InsReport::getWriteTime, report.getWriteTime())); } return; } if (existing == null) { insReportMapper.insert(report); return; @@ -3591,6 +3824,7 @@ row.put("itemName", itemName); row.put("unit", defaultReportText(product.getUnit(), "/")); row.put("result", defaultReportText(product.getLastValue(), "/")); row.put("inspectionConclusion", formatInspectionConclusion(product.getInsResult())); rows.add(row); } } @@ -3629,6 +3863,7 @@ row.put("itemName", formatExportItemName(reportItemName)); row.put("unit", defaultReportText(unit, "/")); row.put("result", result); row.put("inspectionConclusion", formatInspectionConclusion(snapshot.getInsResult())); rows.add(row); } } @@ -3636,6 +3871,16 @@ throw new ErrorException("å½åè®¢åæªæ¾å°å¯çææ¥åçåå§è®°å½æ¨¡æ¿"); } return rows; } private static String formatInspectionConclusion(Integer insResult) { if (Objects.equals(insResult, 1)) { return "åæ ¼"; } if (Objects.equals(insResult, 0)) { return "ä¸åæ ¼"; } return "/"; } private List<TemplateExportCell> getTemplateExportCells(String compressedThing) { @@ -3648,9 +3893,8 @@ } catch (Exception ignored) { thing = compressedThing; } JSONArray cellData = JSON.parseObject(thing).getJSONArray("data").getJSONObject(0).getJSONArray("celldata"); Integer resultColumn = null; Integer itemColumn = null; JSONObject sheet = JSON.parseObject(thing).getJSONArray("data").getJSONObject(0); JSONArray cellData = sheet.getJSONArray("celldata"); Integer unitColumn = null; List<int[]> exportCells = new ArrayList<>(); Map<String, String> templateValues = new HashMap<>(); @@ -3664,13 +3908,6 @@ } String displayValue = value.get("v") == null ? null : String.valueOf(value.get("v")); templateValues.put(row + "-" + column, displayValue); if (resultColumn == null && "æ£éªç»æ".equals(StringUtils.trim(displayValue))) { resultColumn = column; } if (itemColumn == null && ("æ£æµé¡¹ç®".equals(StringUtils.trim(displayValue)) || "æ£éªé¡¹ç®".equals(StringUtils.trim(displayValue)))) { itemColumn = column; } if (unitColumn == null && "åä½".equals(StringUtils.trim(displayValue))) { unitColumn = column; } @@ -3685,13 +3922,9 @@ exportCells.sort(Comparator.comparingInt((int[] cell) -> cell[0]).thenComparingInt(cell -> cell[1])); List<TemplateExportCell> results = new ArrayList<>(); for (int[] exportCell : exportCells) { int resultColumnForRow = resultColumn == null ? exportCell[1] : resultColumn; // é常â导åºå¼âæ¹æ³¨é ç½®å¨é¡¹ç®åç§°åå æ ¼ï¼è¥é ç½®å¨ç»æåå æ ¼ï¼ååå°âæ£æµé¡¹ç®âåååç§°ã Integer itemColumnForRow = !Objects.equals(exportCell[1], resultColumnForRow) ? exportCell[1] : itemColumn; TemplateExportCell result = new TemplateExportCell(); result.resultCoordinate = exportCell[0] + "-" + resultColumnForRow; result.itemCoordinate = itemColumnForRow == null ? null : exportCell[0] + "-" + itemColumnForRow; result.resultCoordinate = getRightAdjacentCoordinate(sheet, exportCell[0], exportCell[1]); result.itemCoordinate = exportCell[0] + "-" + exportCell[1]; result.unitCoordinate = unitColumn == null ? null : exportCell[0] + "-" + unitColumn; result.templateValues = templateValues; results.add(result); @@ -5139,7 +5372,7 @@ } } // 夿æ¯å¦æ¯æ°åç±»å if (sampleProductDto2.getInspectionValueType().equals("1")) { if ("1".equals(sampleProductDto2.getInspectionValueType())) { // ææ£éªå 容妿æ£ç¡«åç¹åç¦ç§æ¶é´æ . å岿 : String lastValue = sampleProductDto2.getLastValue(); if (sampleProductDto2.getInspectionItem().contains("æ£ç¡«åç¹") || sampleProductDto2.getInspectionItem().contains("ç¦ç§æ¶é´")) { inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderRatesServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.QueryWrappers; import com.ruoyi.inspect.dto.SampleOrderDto; import com.ruoyi.inspect.dto.TemplateRateDto; import com.ruoyi.inspect.mapper.InsOrderRatesMapper; import com.ruoyi.inspect.pojo.InsOrderRates; import com.ruoyi.inspect.service.InsOrderRatesService; @@ -29,5 +30,10 @@ public IPage<SampleOrderDto> selectInsOrderRates(Page page, SampleOrderDto sampleOrderDto) { return baseMapper.selectInsOrderRates(page, QueryWrappers.queryWrappers(sampleOrderDto)); } @Override public IPage<TemplateRateDto> selectTemplateRatesDetail(Page page, Integer insOrderId) { return baseMapper.selectTemplateRatesDetail(page, insOrderId); } } inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -364,6 +364,15 @@ } } }); // ä¸åæ¶çæå§æç¼å·å¹¶æ ¡éªå¯ä¸æ§ï¼å£åº¦æ£éªå¤ç¨è¿åæ£éªç¼å·ï¼çå¾ å®¡æ ¸å¤çã if (!InsOrderTypeConstants.QUARTERLY_TEST.equals(insOrder.getOrderType())) { String entrustCode = buildEntrustCode(insOrder, Collections.emptyList()); assertEntrustCodeUnique(entrustCode, insOrder.getId()); insOrder.setEntrustCode(entrustCode); insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate() .eq(InsOrder::getId, insOrder.getId()) .set(InsOrder::getEntrustCode, entrustCode)); } //åææä¸åæå¤è´æåä¸å if (Objects.nonNull(insOrder.getTypeSource())&&Objects.nonNull(insOrder.getIfsInventoryId())) { // å§æäººå°±æ¯æ¥æ£äºº, ç产åä½å°±æ¯ä¾åºååä½ @@ -573,11 +582,19 @@ product.setSort(productSort++); insProductMapper.insert(product); } saveTemplateSnapshots(order.getId(), selections); saveTemplateSnapshots(order.getId(), selections, bindingMap); // ä¸åæ¶çæå§æç¼å·å¹¶æ ¡éªå¯ä¸æ§ï¼éå¤åæç¤ºï¼é¿å çå°å®¡æ ¸ææ¥éã String entrustCode = buildEntrustCode(order, Collections.singletonList(sample)); assertEntrustCodeUnique(entrustCode, order.getId()); insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate() .eq(InsOrder::getId, order.getId()) .set(InsOrder::getEntrustCode, entrustCode)); return order.getId(); } private void saveTemplateSnapshots(Integer orderId, List<OrderTemplateSelectionDto> selections) { private void saveTemplateSnapshots(Integer orderId, List<OrderTemplateSelectionDto> selections, Map<Integer, StandardTreeTemplateBindingVo> bindingMap) { for (OrderTemplateSelectionDto selection : selections) { StandardTemplate template = standardTemplateService.getById(selection.getTemplateId()); if (template == null) { @@ -592,6 +609,18 @@ snapshot.setThing(template.getThing()); snapshot.setSort(selection.getSort()); insOrderStandardTemplateMapper.insert(snapshot); StandardTreeTemplateBindingVo binding = bindingMap.get(selection.getTemplateId()); List<Integer> deviceIds = binding == null || binding.getDeviceIds() == null ? Collections.emptyList() : binding.getDeviceIds(); for (int index = 0; index < deviceIds.size(); index++) { InsOrderTemplateDevice relation = new InsOrderTemplateDevice(); relation.setInsOrderId(orderId); relation.setTemplateId(selection.getTemplateId()); relation.setDeviceId(deviceIds.get(index)); relation.setSort(index); insOrderTemplateDeviceMapper.insert(relation); } } } @@ -675,30 +704,12 @@ public int upInsOrderOfState(InsOrder insOrder) { insOrder.setExamineTime(LocalDateTime.now()); if (insOrder.getState() == 1) { //å®¡æ ¸éè¿æä¼çæå§æç¼å· //å§æç¼å·å·²å¨ä¸åæ¶çæå¹¶æ ¡éªå¯ä¸æ§ï¼å®¡æ ¸æ¶å¤ç¨ï¼åå²/å£åº¦æ£éªè®¢åå åºçæã InsOrder order = this.getById(insOrder.getId()); List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() .eq(InsSample::getInsOrderId, insOrder.getId()) .orderByAsc(InsSample::getId)); // å§æç¼å·æéæ ·æ¥æçæï¼æ°èåæ ·å订åçæ«ä¸¤ä½åæ ·åç¼å·æ«ä¸¤ä½ã // åå²/å¤é¨è®¢åæªå¡«åéæ ·æ¥ææ¶åéå°å½å¤©ï¼é¿å å½±ååææµç¨ã LocalDate entrustDate = order.getSampleDate() == null ? LocalDate.now() : order.getSampleDate(); String entrustCodePrefix = "LMSY-" + entrustDate.format(DateTimeFormatter.BASIC_ISO_DATE) + "-"; String no; if (isDirectTemplateOrder(order, insSamples)) { String sampleCode = insSamples.get(0).getSampleCode(); if (StringUtils.isBlank(sampleCode) || sampleCode.trim().length() < 2) { throw new ErrorException("æ ·åç¼å·ä¸è½ä¸ºç©ºä¸ä¸è½å°äº2ä½"); } sampleCode = sampleCode.trim(); no = entrustCodePrefix + sampleCode.substring(sampleCode.length() - 2); } else { no = numberGenerator.generateNumberWithPrefix(2, entrustCodePrefix, InsOrder::getEntrustCode); } String no = order.getEntrustCode(); // 夿æ¯å¦æ¯å£åº¦æ£éª, æ¯å£åº¦æ£éªåæ¶åææå£åº¦æ£éªä¸å if (InsOrderTypeConstants.QUARTERLY_TEST.equals(order.getOrderType())) { ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate() @@ -714,6 +725,10 @@ no = order1.getEntrustCode(); } } if (StringUtils.isBlank(no)) { no = buildEntrustCode(order, insSamples); } assertEntrustCodeUnique(no, order.getId()); int count = 1; for (InsSample insSample : insSamples) { @@ -734,6 +749,37 @@ return insOrderMapper.updateById(insOrder); } /** * å§æç¼å·å ¨å±å¯ä¸ï¼çæç¼å·ååç»æäº¤ååéæé¤å½å订ååæ ¡éªã */ private void assertEntrustCodeUnique(String entrustCode, Integer currentOrderId) { Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery() .eq(InsOrder::getEntrustCode, entrustCode) .ne(currentOrderId != null, InsOrder::getId, currentOrderId)); if (count > 0) { throw new ErrorException("æ ·å/å§æåå·²åå¨ï¼è¯·ç¡®è®¤æ ·åç¼å·"); } } /** * çæå§æç¼å·ï¼æ°èç´ç»æ¨¡æ¿è®¢åæ«ä¸¤ä½åæ ·åç¼å·æ«ä¸¤ä½ï¼å ¶ä½æéæ ·æ¥æçæåºå·ã */ private String buildEntrustCode(InsOrder order, List<InsSample> insSamples) { LocalDate entrustDate = order.getSampleDate() == null ? LocalDate.now() : order.getSampleDate(); String entrustCodePrefix = "LMSY-" + entrustDate.format(DateTimeFormatter.BASIC_ISO_DATE) + "-"; if (isDirectTemplateOrder(order, insSamples)) { String sampleCode = insSamples.get(0).getSampleCode(); if (StringUtils.isBlank(sampleCode) || sampleCode.trim().length() < 2) { throw new ErrorException("æ ·åç¼å·ä¸è½ä¸ºç©ºä¸ä¸è½å°äº2ä½"); } sampleCode = sampleCode.trim(); return entrustCodePrefix + sampleCode.substring(sampleCode.length() - 2); } return numberGenerator.generateNumberWithPrefix(2, entrustCodePrefix, InsOrder::getEntrustCode); } @Override public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) { Map<String, Object> map = new HashMap<>(); inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
@@ -46,6 +46,7 @@ import com.ruoyi.inspect.service.InsReportService; import com.ruoyi.inspect.service.RawMaterialOrderService; import com.ruoyi.inspect.util.PreserveReportPicturePlaceholderHandler; import com.ruoyi.inspect.util.ReportSignaturePictureUtils; import com.ruoyi.system.mapper.UserMapper; import com.ruoyi.system.service.InformationNotificationService; import lombok.extern.slf4j.Slf4j; @@ -86,6 +87,9 @@ @Slf4j public class InsReportServiceImpl extends ServiceImpl<InsReportMapper, InsReport> implements InsReportService { private static final int DETECTION_REPORT = 0; private static final int INSPECTION_REPORT = 1; @Resource private UserMapper userMapper; @Resource @@ -209,30 +213,30 @@ info.setViewStatus(false); info.setJumpPath(MenuJumpPathConstants.REPORT_PREPARATION); informationNotificationService.addInformationNotification(info); //ç³»ç»çææ¥åå°å String url = insReport.getUrl(); //æå¨ä¸ä¼ æ¥åå°å String urlS = insReport.getUrlS(); String primaryReportUrl = getPrimaryReportUrl(insReport); // 夿æ¯å¦æ¯åææ éè¦æ¿æ¢****æä¾åºå IfsInventoryQuantity one = ifsInventoryQuantityMapper.selectOne(new LambdaQueryWrapper<IfsInventoryQuantity>() .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId())); if (one != null) { if (isRawMater && order.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) { changeText(new HashMap<String, String>() {{ put("**********", one.getSupplierName()); }}, (StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); for (String reportUrl : getApprovalReportUrls(insReport)) { changeText(new HashMap<String, String>() {{ put("**********", one.getSupplierName()); }}, reportUrl.replace("/word", wordUrl)); } } } wordInsertUrl(new HashMap<String, Object>() {{ put("writeUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create()); Map<String, Object> writeMarks = new HashMap<String, Object>() {{ put("writeUrl", ReportSignaturePictureUtils.create(imgUrl, signatureUrl)); put("writeDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(null)).create()); put("insUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create()); }}, (StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); put("insUrl", ReportSignaturePictureUtils.create(imgUrl, signatureUrl)); }}; writeMarksToReportFiles(insReport, writeMarks); // ä¿®æ¹ä¸´æ¶pdf String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); String tempUrlPdf = wordToPdfTemp(primaryReportUrl.replace("/word", wordUrl)); insReport.setTempUrlPdf("/word/" + tempUrlPdf); insReportMapper.updateById(insReport); @@ -330,17 +334,15 @@ info.setViewStatus(false); info.setJumpPath(MenuJumpPathConstants.REPORT_PREPARATION); informationNotificationService.addInformationNotification(info); //ç³»ç»çææ¥åå°å String url = insReport.getUrl(); //æå¨ä¸ä¼ æ¥åå°å String urlS = insReport.getUrlS(); wordInsertUrl(new HashMap<String, Object>() {{ put("examineUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create()); String primaryReportUrl = getPrimaryReportUrl(insReport); Map<String, Object> examineMarks = new HashMap<String, Object>() {{ put("examineUrl", ReportSignaturePictureUtils.create(imgUrl, signatureUrl)); put("examineDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(null)).create()); }}, (StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); }}; writeMarksToReportFiles(insReport, examineMarks); // ä¿®æ¹ä¸´æ¶pdf String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); String tempUrlPdf = wordToPdfTemp(primaryReportUrl.replace("/word", wordUrl)); insReport.setTempUrlPdf("/word/" + tempUrlPdf); // åéä¼ä¸å¾®ä¿¡éç¥(éç¥æ¹å人审æ¹) @@ -473,28 +475,29 @@ if (StringUtils.isBlank(sealUrl)) { throw new ErrorException(laboratory + "æ¾ä¸å°æ¥åä¸ç¨ç« "); } //ç³»ç»çææ¥åå°å String url = insReport.getUrl(); //æå¨ä¸ä¼ æ¥åå°å String urlS = insReport.getUrlS(); String finalUrl = (StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl); String primaryReportUrl = getPrimaryReportUrl(insReport); String finalUrl = primaryReportUrl.replace("/word", wordUrl); wordInsertUrl(new HashMap<String, Object>() {{ put("ratifyUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create()); Map<String, Object> ratifyMarks = new HashMap<String, Object>() {{ put("ratifyUrl", ReportSignaturePictureUtils.create(imgUrl, signatureUrl)); put("ratifyDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(null)).create()); put("seal1", Pictures.ofLocal(imgUrl + "/" + sealUrl).create()); put("seal2", Pictures.ofLocal(imgUrl + "/" + sealUrl).create()); }}, finalUrl); }}; writeMarksToReportFiles(insReport, ratifyMarks); // ä¿®æ¹ä¸´æ¶pdf insReport.setTempUrlPdf((StrUtil.isBlank(urlS) ? url : urlS).replace(".docx", ".pdf")); insReport.setTempUrlPdf(primaryReportUrl.replace(".docx", ".pdf")); InsOrder insOrder = new InsOrder(); insOrder.setId(insOrderId); insOrder.setState(4); insOrderMapper.updateById(insOrder); wordToPdf(finalUrl, sealUrl, isRawMater && order.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)); for (String reportUrl : getApprovalReportUrls(insReport)) { wordToPdf(reportUrl.replace("/word", wordUrl), sealUrl, isRawMater && order.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)); } // 夿æ¯å¦ä¸ºåææ if (isRawMater) { @@ -537,6 +540,27 @@ return 1; } private String getPrimaryReportUrl(InsReport report) { String reportUrl = StringUtils.isNotBlank(report.getUrlS()) ? report.getUrlS() : report.getUrl(); if (StringUtils.isBlank(reportUrl)) { throw new ErrorException("æ£æµæ¥åæä»¶ä¸åå¨"); } return reportUrl; } private List<String> getApprovalReportUrls(InsReport report) { return Arrays.asList(getPrimaryReportUrl(report), report.getInspectionUrl()).stream() .filter(StringUtils::isNotBlank) .distinct() .collect(Collectors.toList()); } private void writeMarksToReportFiles(InsReport report, Map<String, Object> marks) { for (String reportUrl : getApprovalReportUrls(report)) { wordInsertUrl(marks, reportUrl.replace("/word", wordUrl)); } } //æ¥åæ¹éä¸è½½ @Override @@ -577,17 +601,23 @@ } @Override public void download(Integer id, Integer createOrderUser, HttpServletResponse response) { public void download(Integer id, Integer reportType, Integer createOrderUser, HttpServletResponse response) { if (id == null) { throw new ErrorException("æ¥åä¸è½ä¸ºç©º"); } reportType = reportType == null ? DETECTION_REPORT : reportType; if (!Objects.equals(reportType, DETECTION_REPORT) && !Objects.equals(reportType, INSPECTION_REPORT)) { throw new ErrorException("æ¥åç±»å䏿£ç¡®"); } InsReport report = insReportMapper.selectDownloadableReport(id, createOrderUser); if (report == null) { throw new ErrorException("æ¥åä¸åå¨ãå°æªçæææ æä¸è½½"); } String reportUrl = StringUtils.isNotBlank(report.getUrlS()) ? report.getUrlS() : report.getUrl(); String reportUrl = Objects.equals(reportType, INSPECTION_REPORT) ? report.getInspectionUrl() : getPrimaryReportUrl(report); if (StringUtils.isBlank(reportUrl) || !reportUrl.replace('\\', '/').startsWith("/word/")) { throw new ErrorException("æ¥åæä»¶ä¸åå¨ï¼è¯·è系管çå"); throw new ErrorException((Objects.equals(reportType, INSPECTION_REPORT) ? "æ£éªæ¥å" : "æ£æµæ¥å") + "æä»¶ä¸åå¨ï¼è¯·è系管çå"); } Path root = Paths.get(wordUrl).toAbsolutePath().normalize(); Path file = root.resolve(reportUrl.replace('\\', '/').substring("/word/".length())).normalize(); inspect-server/src/main/java/com/ruoyi/inspect/util/ReportSignaturePictureUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.ruoyi.inspect.util; import com.deepoove.poi.data.PictureRenderData; import com.deepoove.poi.data.Pictures; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; /** * æ¥åç¾åå¾çå·¥å ·ã */ public final class ReportSignaturePictureUtils { private static final int MAX_WIDTH = 90; private static final int MAX_HEIGHT = 45; private ReportSignaturePictureUtils() { } /** * æåå§æ¯ä¾å°ç¾åéé å°æ¥åç¾ååå æ ¼ï¼é¿å å¾çè¶è¿åå æ ¼è¾¹çè被è£åªã */ public static PictureRenderData create(String imageDirectory, String signatureUrl) { String signaturePath = imageDirectory + "/" + signatureUrl; try { BufferedImage image = ImageIO.read(new File(signaturePath)); if (image != null && image.getWidth() > 0 && image.getHeight() > 0) { double scale = Math.min((double) MAX_WIDTH / image.getWidth(), (double) MAX_HEIGHT / image.getHeight()); int width = Math.max(1, (int) Math.round(image.getWidth() * scale)); int height = Math.max(1, (int) Math.round(image.getHeight() * scale)); return Pictures.ofLocal(signaturePath).size(width, height).create(); } } catch (IOException ignored) { // å¾çå æ°æ®è¯»å失败æ¶ä»å¯å°è¯ä»¥é»è®¤å°ºå¯¸åå ¥æ¥åã } return Pictures.ofLocal(signaturePath).size(MAX_WIDTH, MAX_HEIGHT).create(); } } inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -281,6 +281,23 @@ from standard_method where id = #{id} </select> <select id="getStandardMethodReportText" resultType="java.lang.String"> select case when name is null or trim(name) = '' then code else concat(code, 'ã', name, 'ã') end from standard_method where id = #{id} </select> <select id="getStandardMethodReportTextByCode" resultType="java.lang.String"> select case when name is null or trim(name) = '' then code else concat(code, 'ã', name, 'ã') end from standard_method where code = #{code} limit 1 </select> <select id="selLaboratoryCode" resultType="java.lang.String"> select laboratory_code from laboratory inspect-server/src/main/resources/mapper/InsOrderRatesMapper.xml
@@ -11,26 +11,25 @@ then io.sample_view else io.sample end sampleStr, GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model, sum(tempior.rates) + 200 total_price COALESCE(sum(st.price), 0) total_price from ins_order io LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id left join ( select ior.id, ior.ins_order_id, ior.rates from ins_order_rates ior left join ins_product ip on ip.id = ior.ins_product_id left join ins_order io2 on ior.ins_order_id = io2.id GROUP BY CASE WHEN ior.man_hour_group IS NOT NULL AND ior.man_hour_group != '' THEN ior.man_hour_group ELSE ior.id END, CASE WHEN ior.man_hour_group IS NOT NULL AND ior.man_hour_group != '' THEN ior.ins_sample_id ELSE ior.id END, CASE WHEN ior.man_hour_group IS NOT NULL AND ior.man_hour_group != '' THEN ip.radius ELSE ior.id END, CASE WHEN ior.man_hour_group IS NOT NULL AND ior.man_hour_group != '' THEN ip.cable_tag ELSE ior.id END, CASE WHEN ior.man_hour_group IS NOT NULL AND ior.man_hour_group != '' THEN ior.ins_order_id ELSE ior.id END) tempior on tempior.ins_order_id = io.id where tempior.id is not null left join ins_order_standard_template iost on iost.ins_order_id = io.id left join standard_template st on st.id = iost.template_id where iost.id is not null group by io.id) a <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> ${ew.customSqlSegment} </if> </select> <!-- æ¥è¯¢è®¢åè´¹ç¨è¯¦æ ï¼æ¨¡æ¿ä»·æ ¼ï¼ --> <select id="selectTemplateRatesDetail" resultType="com.ruoyi.inspect.dto.TemplateRateDto"> select iost.number, iost.name, COALESCE(st.price, 0) as price from ins_order_standard_template iost left join standard_template st on st.id = iost.template_id where iost.ins_order_id = #{insOrderId} order by iost.sort, iost.id </select> </mapper> inspect-server/src/main/resources/mapper/InsReportMapper.xml
@@ -82,7 +82,10 @@ <!-- æ¥åæ¥è¡¨å¯¼åº --> <select id="reportAllExport" resultType="com.ruoyi.inspect.dto.InsReportExport"> select code, case when report_type = 0 then 'æ£æµæ¥å' else 'æ£éªæ¥å' end report_type_name, case when inspection_url is not null and inspection_url != '' then 'æ£æµæ¥åãæ£éªæ¥å' when report_type = 0 then 'æ£æµæ¥å' else 'æ£éªæ¥å' end report_type_name, case when type_source = 0 then 'æåä¸å' else 'åææä¸å' end type_source, case when order_type = 'æ½æ£' then 'æ½æ£' inspect-server/src/main/resources/static/detection-report-template-v2.docxBinary files differ
inspect-server/src/main/resources/static/inspection-report-template-v2.docxBinary files differ
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/CustomController.java
@@ -35,7 +35,7 @@ } @ApiOperation(value = "å é¤å®¢æ·ä¿¡æ¯") @DeleteMapping("/delCustomById") public Result delCustomById(Long id) { public Result delCustomById(@RequestParam("id") Long id) { return Result.success(customService.delCustomById(id)); } ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Custom.java
@@ -28,6 +28,9 @@ @ApiModelProperty(value = "åä½å°å") private String address; @ApiModelProperty(value = "è系人") private String contact; @ApiModelProperty(value = "å·¥åå") private String code;