basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java
@@ -359,7 +359,7 @@ buffer.append("]"); str.setRadiusList(buffer.toString()); } // æ¶è´¹æ å //æ¶è´¹æ å if (list1.get(26) == null) { str.setRates(null); } else { cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java
@@ -79,9 +79,10 @@ @ApiOperation(value = "å¯¼å ¥ä½åºæä»¶éæ¯è®°å½") @PostMapping("/exportInManageRecordCancel") public Result exportInManageRecordCancel(MultipartFile file){ return Result.success(manageRecordCancelService.exportInManageRecordCancel(file)); try { return Result.success(manageRecordCancelService.exportInManageRecordCancel(file)); }catch (Exception e){ return Result.fail(e.getMessage()); } } } cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java
@@ -2,6 +2,7 @@ import cn.hutool.core.lang.UUID; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -471,6 +472,9 @@ } } } if(CollectionUtils.isEmpty(manageRecordCancelList)){ throw new RuntimeException("å¯¼å ¥æ¨¡æ¿æè¯¯"); } saveOrUpdateBatch(manageRecordCancelList); } catch (IOException e) { e.printStackTrace(); inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,127 @@ package com.ruoyi.inspect.controller; import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto; import com.ruoyi.common.core.domain.Result; import com.ruoyi.inspect.dto.DataAnalysisDto; import com.ruoyi.inspect.service.DataAnalysisService; import com.ruoyi.inspect.vo.DeviationAnalyzeVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @Author zhuo * @Date 2024/10/16 */ @RequestMapping("/dataAnalysis") @RestController @AllArgsConstructor @Api(tags = "æ°æ®åæ") public class DataAnalysisController { private DataAnalysisService dataAnalysisService; /** * æ¥è¯¢åæææ±ç¶ç»è®¡ * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢åæææ±ç¶ç»è®¡") @GetMapping("/getRawPassRateByBarChart") public Result getRawPassRateByBarChart(DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getRawPassRateByBarChart(dataAnalysisDto)); } /** * æ¥è¯¢åæææ±ç¶ç»è®¡ * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢åææåæ ¼çé¥¼ç¶æ") @GetMapping("/getRawPassRateByCake") public Result getRawPassRateByCake(DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getRawPassRateByCake(dataAnalysisDto)); } /** * æ¥è¯¢åææé¡¹ * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢åææé¡¹") @GetMapping("/getRawItemNames") public Result getRawItemNames(DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getRawItemNames(dataAnalysisDto)); } /** * æ¥è¯¢åææé¡¹æ£åæ * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢åææé¡¹æ£åæ") @PostMapping("/getRawProductAnalysis") public Result getRawProductAnalysis(@RequestBody DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getRawProductAnalysis(dataAnalysisDto)); } /** * æ¥è¯¢åææé¡¹æ£åæå表 * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢åææé¡¹æ£åæå表") @PostMapping("/getRawProductAnalysisAllList") public Result<List<IfsInventoryQuantitySupplierDto>> getRawProductAnalysisAllList(@RequestBody DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getRawProductAnalysisAllList(dataAnalysisDto)); } /** * æ¥è¯¢åææé¡¹æ£åæå表 * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢åææé¡¹æ£åæåæ ¼ç") @PostMapping("/getRawProductAnalysisRawPass") public Result getRawProductAnalysisRawPass(@RequestBody DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getRawProductAnalysisRawPass(dataAnalysisDto)); } /** * æ¥è¯¢åææé¡¹æ£ååå®¶æ°æ®å¯¹æ¯ * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢åææé¡¹æ£ååå®¶æ°æ®å¯¹æ¯") @PostMapping("/getRawSupplierCompare") public Result<DeviationAnalyzeVo> getRawSupplierCompare(@RequestBody DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getRawSupplierCompare(dataAnalysisDto)); } /** * æ¥è¯¢æ¬æä¸ä¸ä¸ªæåæ ¼çå¯¹æ¯ * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢æ¬æä¸ä¸ä¸ªæåæ ¼ç对æ¯") @GetMapping("/getRawUpMonth") public Result getRawUpMonth(DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getRawUpMonth(dataAnalysisDto)); } /** * æ¥è¯¢æ£éªé¡¹ç±»åé¥¼å¾ * @param dataAnalysisDto * @return */ @ApiOperation(value = "æ¥è¯¢æ£éªé¡¹ç±»å饼å¾") @GetMapping("/getOrderTypeCookie") public Result getOrderTypeCookie(DataAnalysisDto dataAnalysisDto) { return Result.success(dataAnalysisService.getOrderTypeCookie(dataAnalysisDto)); } } inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.ruoyi.inspect.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @Author zhuo * @Date 2024/10/16 */ @Data public class DataAnalysisDto { @ApiModelProperty("æ¶é´ç±»å, 1:æ¬å¨, 2:æ¬æ, 3:æ¬å¹´") private String dateType; @ApiModelProperty("æ£æµç±»å, 1:è¿åæ£éª, 2:å£åº¦æ£éª") private String orderType; @ApiModelProperty("å¼å§æ¶é´") private String beginDate; @ApiModelProperty("ç»ææ¶é´") private String endDate; @ApiModelProperty("æ ·ååç§°") private String sampleName; @ApiModelProperty("åå·") private String modelName; @ApiModelProperty("ä¾åºååç§°") private String supplierName; @ApiModelProperty("åç»ç±»å, 0: é»è®¤æç §æ ·ååºå 1: åä¸åå®¶, åä¸åå·, ä¸åæ¹æ¬¡, 2 : åä¸åå·, ä¸ååå®¶") private String groupType; @ApiModelProperty("éæ©çæ£éªé¡¹åç§°") private List<String> itemNames; @ApiModelProperty("订åid") private List<Integer> orderIds; @ApiModelProperty("åå®¶æ°æ®") private List<String> supplierDataList; } inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,74 @@ package com.ruoyi.inspect.mapper; import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto; import com.ruoyi.inspect.dto.DataAnalysisDto; import com.ruoyi.inspect.vo.RawMaterialSupplierVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; /** * æ°æ®åæ * * @Author zhuo * @Date 2024/10/16 */ @Mapper public interface DataAnalysisMapper { /** * è·åæ¬å¨çåææä¿¡æ¯ * @return */ List<Map<String, Object>> getRawPassRateByBarChartByWeek(@Param("dto") DataAnalysisDto dataAnalysisDto); /** * è·åæ¬æçåææä¿¡æ¯ * @return */ List<Map<String, Object>> getRawPassRateByBarChartByDay(@Param("dto") DataAnalysisDto dataAnalysisDto); /** * è·åæ¬å¹´çåææä¿¡æ¯ * @return */ List<Map<String, Object>> getRawPassRateByBarChartByYear(@Param("dto") DataAnalysisDto dataAnalysisDtor); /** * æ¥ç忿饼ç¶å¾ * @return */ Map<String, Object> getRawPassRateByCake(@Param("dto") DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢æ£æµé¡¹éå * @param dataAnalysisDto * @return */ List<IfsInventoryQuantitySupplierDto> getRawProductAnalysisAllSample(@Param("dto") DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢ææç * @param dataAnalysisDto * @return */ List<IfsInventoryQuantitySupplierDto> getRawProductAnalysisList(@Param("dto") DataAnalysisDto dataAnalysisDto); List<RawMaterialSupplierVo> getItemValueByOrderIds(@Param("insOrderIds") List<Integer> insOrderIds, @Param("itemName") String itemName); /** * æ¥è¯¢æ¬æä¸ä¸æåæ ¼çå¯¹æ¯ * @return */ List<Map<String, Object>> getRawUpMonth(); /** * æ¥è¯¢æ£éªé¡¹ç±»åé¥¼å¾ * @return */ Map<String, Object> getOrderTypeCookie(); } inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,77 @@ package com.ruoyi.inspect.service; import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto; import com.ruoyi.inspect.dto.DataAnalysisDto; import com.ruoyi.inspect.vo.DeviationAnalyzeVo; import com.ruoyi.inspect.vo.RawProductAnalysisVo; import java.util.List; import java.util.Map; /** * æ°æ®åæ * * @Author zhuo * @Date 2024/10/16 */ public interface DataAnalysisService { /** * æ¥è¯¢åæææ±ç¶ç»è®¡ * @return */ List<Map<String, Object>> getRawPassRateByBarChart(DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢åææåæ ¼ç饼ç¶å¾ * @param dataAnalysisDto * @return */ Map<String, Object> getRawPassRateByCake(DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢æ£éªé¡¹åç§° * @param dataAnalysisDto * @return */ List<String> getRawItemNames(DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢åææé¡¹æ£åæ * @param dataAnalysisDto * @return */ RawProductAnalysisVo getRawProductAnalysis(DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢æ£æµé¡¹åæå表 * @param dataAnalysisDto * @return */ List<IfsInventoryQuantitySupplierDto> getRawProductAnalysisAllList(DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢åææé¡¹æ£åæåæ ¼ç * @param dataAnalysisDto * @return */ RawProductAnalysisVo getRawProductAnalysisRawPass(DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢åææé¡¹æ£ååå®¶æ°æ®å¯¹æ¯ * @param dataAnalysisDto * @return */ DeviationAnalyzeVo getRawSupplierCompare(DataAnalysisDto dataAnalysisDto); /** * æ¥è¯¢æ¬æä¸ä¸æåæ ¼çå¯¹æ¯ * @param dataAnalysisDto * @return */ List<Map<String, Object>> getRawUpMonth(DataAnalysisDto dataAnalysisDto); Map<String, Object> getOrderTypeCookie(DataAnalysisDto dataAnalysisDto); } inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,613 @@ package com.ruoyi.inspect.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto; import com.ruoyi.common.constant.InsOrderTypeConstants; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.dto.DataAnalysisDto; import com.ruoyi.inspect.dto.SampleProductRawAnalysisDto; import com.ruoyi.inspect.mapper.DataAnalysisMapper; import com.ruoyi.inspect.mapper.InsProductMapper; import com.ruoyi.inspect.service.DataAnalysisService; import com.ruoyi.inspect.vo.DeviationAnalyzeVo; import com.ruoyi.inspect.vo.RawMaterialSupplierVo; import com.ruoyi.inspect.vo.RawProductAnalysisVo; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * æ°æ®åæ * * @Author zhuo * @Date 2024/10/16 */ @Service @AllArgsConstructor public class DataAnalysisServiceImpl implements DataAnalysisService { private DataAnalysisMapper dataAnalysisMapper; private InsProductMapper insProductMapper; /** * æ¥è¯¢åæææ±ç¶ç»è®¡ * @return searchTime æ¶é´ * @return passRate åæ ¼ç * @return sum æ»æ° */ @Override public List<Map<String, Object>> getRawPassRateByBarChart(DataAnalysisDto dataAnalysisDto) { // æ ¼å¼ååæ®µ, é¿å æ¥é this.formatDataAnalysisDto(dataAnalysisDto); // è·åå½åæ¥æ DateTime now = DateUtil.date(); if (StrUtil.isNotBlank(dataAnalysisDto.getBeginDate()) && StrUtil.isNotBlank(dataAnalysisDto.getEndDate())) { return dataAnalysisMapper.getRawPassRateByBarChartByDay(dataAnalysisDto); } else if (dataAnalysisDto.getDateType().equals("1")) { // è·åæ¬å¨çå¼å§æ¶é´ï¼å¨ä¸ 00:00:00ï¼ DateTime beginOfWeek = DateUtil.beginOfWeek(now); // è·åæ¬å¨çç»ææ¶é´ï¼å¨æ¥ 23:59:59ï¼ // è·åæ¬å¨çç»ææ¶é´ï¼å¨æ¥ 23:59:59ï¼ DateTime endOfWeek = DateUtil.endOfWeek(now); dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss")); dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss")); return dataAnalysisMapper.getRawPassRateByBarChartByWeek(dataAnalysisDto); } else if (dataAnalysisDto.getDateType().equals("2")) { // è·åå½åæçå¼å§æ¶é´ï¼æ¯æ1å· 00:00:00ï¼ DateTime beginOfMonth = DateUtil.beginOfMonth(now); // è·åå½åæçç»ææ¶é´ï¼æ¬ææåä¸å¤© 23:59:59ï¼ DateTime endOfMonth = DateUtil.endOfMonth(now); dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss")); dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss")); return dataAnalysisMapper.getRawPassRateByBarChartByDay(dataAnalysisDto); } else if (dataAnalysisDto.getDateType().equals("3")) { // è·åå½åå¹´çå¼å§æ¶é´ï¼æ¯å¹´1æ1æ¥ 00:00:00ï¼ DateTime beginOfYear = DateUtil.beginOfYear(now); // è·åå½åå¹´çç»ææ¶é´ï¼æ¯å¹´12æ31æ¥ 23:59:59ï¼ DateTime endOfYear = DateUtil.endOfYear(now); dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss")); dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss")); return dataAnalysisMapper.getRawPassRateByBarChartByYear(dataAnalysisDto); } return null; } /** * æ¥è¯¢åææé¥¼ç¶å¾ * @param dataAnalysisDto * @return * sum : æ»æ° * unQualified : ä¸åæ ¼æ°é * qualified : åæ ¼æ°é * passRate : åæ ¼ç */ @Override public Map<String, Object> getRawPassRateByCake(DataAnalysisDto dataAnalysisDto) { // æ ¼å¼ååæ®µ, é¿å æ¥é this.formatDataAnalysisDto(dataAnalysisDto); // è·åå½åæ¥æ DateTime now = DateUtil.date(); if (StrUtil.isNotBlank(dataAnalysisDto.getBeginDate()) && StrUtil.isNotBlank(dataAnalysisDto.getEndDate())) { } else if (dataAnalysisDto.getDateType().equals("1")) { // è·åæ¬å¨çå¼å§æ¶é´ï¼å¨ä¸ 00:00:00ï¼ DateTime beginOfWeek = DateUtil.beginOfWeek(now); // è·åæ¬å¨çç»ææ¶é´ï¼å¨æ¥ 23:59:59ï¼ DateTime endOfWeek = DateUtil.endOfWeek(now); dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss")); dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss")); } else if (dataAnalysisDto.getDateType().equals("2")) { // è·åå½åæçå¼å§æ¶é´ï¼æ¯æ1å· 00:00:00ï¼ DateTime beginOfMonth = DateUtil.beginOfMonth(now); // è·åå½åæçç»ææ¶é´ï¼æ¬ææåä¸å¤© 23:59:59ï¼ DateTime endOfMonth = DateUtil.endOfMonth(now); dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss")); dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss")); } else if (dataAnalysisDto.getDateType().equals("3")) { // è·åå½åå¹´çå¼å§æ¶é´ï¼æ¯å¹´1æ1æ¥ 00:00:00ï¼ DateTime beginOfYear = DateUtil.beginOfYear(now); // è·åå½åå¹´çç»ææ¶é´ï¼æ¯å¹´12æ31æ¥ 23:59:59ï¼ DateTime endOfYear = DateUtil.endOfYear(now); dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss")); dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss")); } return dataAnalysisMapper.getRawPassRateByCake(dataAnalysisDto); } /** * æ¥è¯¢æ£éªé¡¹åç§° * @param dataAnalysisDto * @return */ @Override public List<String> getRawItemNames(DataAnalysisDto dataAnalysisDto) { // æ ¼å¼ååæ®µ, é¿å æ¥é this.formatDataAnalysisDto(dataAnalysisDto); List<IfsInventoryQuantitySupplierDto> analysisList = dataAnalysisMapper.getRawProductAnalysisAllSample(dataAnalysisDto); // æ ¹æ®æ ·åidæ¥è¯¢æ£æµåæ° if (CollectionUtils.isEmpty(analysisList)) { return null; } List<Integer> sampleIds = analysisList.stream().map(IfsInventoryQuantitySupplierDto::getSampleId).collect(Collectors.toList()); // æ¥è¯¢æ£éªé¡¹ç® return insProductMapper.selectItemNameBySampleIds(sampleIds); } /** * æ¥è¯¢åææé¡¹æ£åæ * @param dataAnalysisDto * @return */ @Override public RawProductAnalysisVo getRawProductAnalysis(DataAnalysisDto dataAnalysisDto) { // æ ¼å¼ååæ®µ, é¿å æ¥é this.formatDataAnalysisDto(dataAnalysisDto); List<IfsInventoryQuantitySupplierDto> analysisList = dataAnalysisMapper.getRawProductAnalysisAllSample(dataAnalysisDto); // æ ¹æ®æ ·åidæ¥è¯¢æ£æµåæ° if (CollectionUtils.isEmpty(analysisList)) { return null; } List<Integer> sampleIds = analysisList.stream().map(IfsInventoryQuantitySupplierDto::getSampleId).collect(Collectors.toList()); // æ¥è¯¢æ£éªé¡¹ç® List<SampleProductRawAnalysisDto> sampleProductList = insProductMapper.selectListBySampleIds(sampleIds); List<String> itemNames = new ArrayList<>(); if (CollectionUtils.isNotEmpty(dataAnalysisDto.getItemNames())) { itemNames = dataAnalysisDto.getItemNames(); } else { itemNames = insProductMapper.selectItemNameBySampleIds(sampleIds); } // æ ¹æ®æ ·ååç» List<Map<String, Object>> productList = new ArrayList<>(); Map<Integer, List<SampleProductRawAnalysisDto>> collect = sampleProductList.stream().collect(Collectors.groupingBy(SampleProductRawAnalysisDto::getInsSampleId)); List<String> finalItemNames = itemNames; collect.forEach((integer, rawAnalysisDtos) -> { // æ£éªé¡¹ç®åç§°è½¬æ¢æmap Map<String, Object> itemMap = new HashMap<>(); for (String itemName : finalItemNames) { itemMap.put(itemName, null); } // é忣éªé¡¹ for (SampleProductRawAnalysisDto rawAnalysisDto : rawAnalysisDtos) { itemMap.put(rawAnalysisDto.getInspectionItem(), rawAnalysisDto.getLastValue()); } itemMap.put("product", rawAnalysisDtos.get(0).getSampleCode()); productList.add(itemMap); }); RawProductAnalysisVo rawProductAnalysisVo = new RawProductAnalysisVo(); rawProductAnalysisVo.setItemNames(itemNames); rawProductAnalysisVo.setProductList(productList); return rawProductAnalysisVo; } /** * æ¥è¯¢æ£æµé¡¹åæå表 * @param dataAnalysisDto * @return */ @Override public List<IfsInventoryQuantitySupplierDto> getRawProductAnalysisAllList(DataAnalysisDto dataAnalysisDto) { // æ ¼å¼ååæ®µ, é¿å æ¥é this.formatDataAnalysisDto(dataAnalysisDto); return dataAnalysisMapper.getRawProductAnalysisList(dataAnalysisDto); } /** * æ¥è¯¢é¡¹æ£åæåæ ¼ç * @param dataAnalysisDto * @return */ @Override public RawProductAnalysisVo getRawProductAnalysisRawPass(DataAnalysisDto dataAnalysisDto) { // æ ¼å¼ååæ®µ, é¿å æ¥é this.formatDataAnalysisDto(dataAnalysisDto); List<IfsInventoryQuantitySupplierDto> analysisList = dataAnalysisMapper.getRawProductAnalysisAllSample(dataAnalysisDto); // æ ¹æ®æ ·åidæ¥è¯¢æ£æµåæ° if (CollectionUtils.isEmpty(analysisList)) { return null; } List<Integer> sampleIds = analysisList.stream().map(IfsInventoryQuantitySupplierDto::getSampleId).collect(Collectors.toList()); // æ¥è¯¢æ£éªé¡¹ç® List<SampleProductRawAnalysisDto> sampleProductList = insProductMapper.selectListBySampleIds(sampleIds); List<String> itemNames = new ArrayList<>(); List<String> finalItemNames = itemNames; if (CollectionUtils.isNotEmpty(dataAnalysisDto.getItemNames())) { itemNames = dataAnalysisDto.getItemNames(); } else { itemNames = insProductMapper.selectItemNameBySampleIds(sampleIds); } // åç» List<Map<String, Object>> productList = new ArrayList<>(); Map<String, List<SampleProductRawAnalysisDto>> groupList = new HashMap<>(); switch (dataAnalysisDto.getGroupType()) { case "0": // é»è®¤æ ·ååºå groupList = sampleProductList.stream() .collect(Collectors.groupingBy(SampleProductRawAnalysisDto::getSample)); break; case "1": // æ¹æ¬¡å·åºå groupList = sampleProductList.stream() .collect(Collectors.groupingBy(SampleProductRawAnalysisDto::getUpdateBatchNo)); break; case "2": // åå®¶åºå groupList = sampleProductList.stream() .collect(Collectors.groupingBy(SampleProductRawAnalysisDto::getSupplierName)); break; } groupList.forEach((groupName, rawAnalysisDtos) -> { // æç §æ£éªé¡¹åºå // æ£éªé¡¹ç®åç§°è½¬æ¢æmap Map<String, Object> itemMap = new HashMap<>(); for (String itemName : finalItemNames) { itemMap.put(itemName, null); } Map<String, List<SampleProductRawAnalysisDto>> groupItemList = rawAnalysisDtos.stream().collect(Collectors.groupingBy(SampleProductRawAnalysisDto::getInspectionItem)); groupItemList.forEach((itemName, dtos) -> { // ç»è®¡åæ ¼æ»æ° long qualifiedCount = dtos.stream() .filter(dto -> dto.getInsResult() != null && dto.getInsResult().equals(1)) .count(); long totalCount = dtos.size(); BigDecimal passRate = new BigDecimal(qualifiedCount).divide(new BigDecimal(totalCount), 4, RoundingMode.HALF_UP) .multiply(new BigDecimal(100)) .setScale(2, RoundingMode.HALF_UP); itemMap.put(itemName, passRate); }); itemMap.put("product", groupName); productList.add(itemMap); }); RawProductAnalysisVo rawProductAnalysisVo = new RawProductAnalysisVo(); rawProductAnalysisVo.setItemNames(itemNames); rawProductAnalysisVo.setProductList(productList); return rawProductAnalysisVo; } @Override public DeviationAnalyzeVo getRawSupplierCompare(DataAnalysisDto dataAnalysisDto) { // å¤æè®¢åidæ¯å¦æäºä¸ª if (CollectionUtils.isEmpty(dataAnalysisDto.getOrderIds()) || dataAnalysisDto.getOrderIds().size() != 5) { throw new ErrorException("è¯·éæ©äºæ¡æ°æ®"); } if (CollectionUtils.isEmpty(dataAnalysisDto.getItemNames()) || dataAnalysisDto.getItemNames().size() != 1) { throw new ErrorException("è¯·éæ©ä¸ä¸ªæ£éªé¡¹æ£éªé¡¹"); } if (CollectionUtils.isNotEmpty(dataAnalysisDto.getSupplierDataList())) { if (dataAnalysisDto.getSupplierDataList().size() != 5) { throw new ErrorException("åå®¶æ°æ®è¯·è¾å ¥å®æ´5æ¡"); } } List<RawMaterialSupplierVo> rawMaterialSupplierVoList = dataAnalysisMapper.getItemValueByOrderIds(dataAnalysisDto.getOrderIds(), dataAnalysisDto.getItemNames().get(0)); // 夿åå®¶ææåç§°è§æ ¼åå·æ¯å¦æ¯ä¸æ ·ç RawMaterialSupplierVo rawMaterialSupplierVo = rawMaterialSupplierVoList.get(0); for (RawMaterialSupplierVo materialSupplierVo : rawMaterialSupplierVoList) { if (!materialSupplierVo.getSupplierName().equals(rawMaterialSupplierVo.getSupplierName()) || !materialSupplierVo.getSample().equals(rawMaterialSupplierVo.getSample()) || !materialSupplierVo.getModel().equals(rawMaterialSupplierVo.getModel())) { throw new ErrorException("éæ©çæ£éªä¿¡æ¯ä¸å¹é "); } } List<String> lastValues = rawMaterialSupplierVoList.stream().map(RawMaterialSupplierVo::getLastValue).collect(Collectors.toList()); // è®¡ç®æ¬å°æ°æ® Map<String, List<Object>> localData = dataCompute(lastValues); DeviationAnalyzeVo deviationAnalyzeVo = new DeviationAnalyzeVo(); deviationAnalyzeVo.setLocalData(localData.get("data")); deviationAnalyzeVo.setLocalULC(localData.get("uclData")); deviationAnalyzeVo.setLocalLCL(localData.get("lclData")); deviationAnalyzeVo.setLocalAverage(localData.get("averageData")); deviationAnalyzeVo.setLocalRange(localData.get("rangeData")); // 夿æ¯å¦æåå®¶æ°æ® if (CollectionUtils.isNotEmpty(dataAnalysisDto.getSupplierDataList())) { List<String> supplierValues = dataAnalysisDto.getSupplierDataList(); List<Object> absoluteDeviation = new ArrayList<>(); List<Object> averageList = new ArrayList<>(); for (int i = 0; i < lastValues.size(); i++) { // 夿æå¼æ¯å¦ä¸ºç©º if (StringUtils.isNotBlank(lastValues.get(i)) || StringUtils.isNotBlank(supplierValues.get(i))) { BigDecimal laseValue = new BigDecimal(lastValues.get(i)); BigDecimal supplierValue = new BigDecimal(supplierValues.get(i)); // è®¡ç® (B3 - B2) BigDecimal result = laseValue.subtract(supplierValue) .divide(laseValue, 10, RoundingMode.HALF_UP) .abs() .setScale(2, RoundingMode.HALF_UP); absoluteDeviation.add(result); } else { absoluteDeviation.add(null); } } // 计ç®å¹³åå¼ List<String> stringList = absoluteDeviation.stream() .map(obj -> obj == null ? "null" : obj.toString()) .collect(Collectors.toList()); BigDecimal average = computeAverage(stringList); absoluteDeviation.add(average); for (int i = 0; i < 5; i++) { averageList.add(average); } // 计ç®åå®¶æ°æ® Map<String, List<Object>> supplierData = dataCompute(supplierValues); deviationAnalyzeVo.setSupplierData(supplierData.get("data")); deviationAnalyzeVo.setSupplierULC(supplierData.get("uclData")); deviationAnalyzeVo.setSupplierLCL(supplierData.get("lclData")); deviationAnalyzeVo.setSupplierAverage(supplierData.get("averageData")); deviationAnalyzeVo.setSupplierRange(supplierData.get("rangeData")); deviationAnalyzeVo.setAbsoluteDeviation(absoluteDeviation); deviationAnalyzeVo.setAverage(averageList); } return deviationAnalyzeVo; } /** * æ¥è¯¢æ¬æä¸ä¸æåæ ¼çå¯¹æ¯ * @param dataAnalysisDto * @return */ @Override public List<Map<String, Object>> getRawUpMonth(DataAnalysisDto dataAnalysisDto) { return dataAnalysisMapper.getRawUpMonth(); } /** * æ¥è¯¢æ£éªé¡¹ç±»åé¥¼å¾ * @param dataAnalysisDto * @return */ @Override public Map<String, Object> getOrderTypeCookie(DataAnalysisDto dataAnalysisDto) { return dataAnalysisMapper.getOrderTypeCookie(); } /** * 计ç®è¿åæ°æ® * @param lastValues * @return */ private static Map<String, List<Object>> dataCompute(List<String> lastValues) { // å¹³åå¼ BigDecimal average = computeAverage(lastValues); // æ ååå·® BigDecimal standardDeviation = computeStandardDeviation(lastValues); // ç¸å¯¹åå·® BigDecimal relativeDeviation = standardDeviation.divide(average, 2, RoundingMode.HALF_UP); // å¹³åç¸å¯¹åå·® BigDecimal sqrt5 = BigDecimal.valueOf(Math.sqrt(5)); BigDecimal averageRelativeDeviation = standardDeviation.divide(sqrt5, 2, RoundingMode.HALF_UP); // ucl BigDecimal ucl = average.add(new BigDecimal("3").multiply(standardDeviation)).setScale(2, RoundingMode.HALF_UP); // lcl BigDecimal lcl = average.subtract(new BigDecimal("3").multiply(standardDeviation)).setScale(2, RoundingMode.HALF_UP); // æå·® BigDecimal range = computeRange(lastValues); // æ°æ®æ¼æ¥ // æ£æµæ°æ® List<Object> data = new ArrayList<>(); for (String lastValue : lastValues) { data.add(lastValue); } data.add(average); data.add(standardDeviation); data.add(relativeDeviation); data.add(averageRelativeDeviation); //ucl List<Object> uclData = new ArrayList<>(); //lcl List<Object> lclData = new ArrayList<>(); //å¹³åå¼ List<Object> averageData = new ArrayList<>(); //æå·® List<Object> rangeData = new ArrayList<>(); for (int i = 0; i < 5; i++) { uclData.add(ucl); lclData.add(lcl); averageData.add(average); rangeData.add(range); } Map<String, List<Object>> map = new HashMap<>(); map.put("data", data); map.put("uclData", uclData); map.put("lclData", lclData); map.put("averageData", averageData); map.put("rangeData", rangeData); return map; } /** * è®¡ç®æå·® * @param lastValues * @return */ public static BigDecimal computeRange(List<String> lastValues) { int count = 0; BigDecimal min = null; BigDecimal max = null; for (String value : lastValues) { if (StrUtil.isNotBlank(value)) { BigDecimal bigDecimalValue = new BigDecimal(value); if (min == null || bigDecimalValue.compareTo(min) < 0) { min = bigDecimalValue; } if (max == null || bigDecimalValue.compareTo(max) > 0) { max = bigDecimalValue; } count++; } } if (count == 0 || min == null || max == null) { return BigDecimal.ZERO; } BigDecimal range = max.subtract(min); return range.setScale(2, RoundingMode.HALF_UP); } /** * 计ç®å¹³åå¼ * @param values * @return */ private static BigDecimal computeAverage(List<String> values) { BigDecimal sum = BigDecimal.ZERO; int count = 0; for (String value : values) { if (StrUtil.isNotBlank(value)) { BigDecimal number = new BigDecimal(value); sum = sum.add(number); count++; } } return count == 0 ? BigDecimal.ZERO : sum.divide(BigDecimal.valueOf(count), 2, BigDecimal.ROUND_HALF_UP); } /** * è®¡ç®æ ååå·® * @return */ private static BigDecimal computeStandardDeviation(List<String> lastValues) { int count = 0; // å°å符串转æ¢ä¸º BigDecimal å表 List<BigDecimal> values = new ArrayList<>(); for (String value : lastValues) { if (StrUtil.isNotBlank(value)) { values.add(new BigDecimal(value)); count++; } } if (count == 0) { return BigDecimal.ZERO; } // 计ç®å¹³åå¼ BigDecimal sum = BigDecimal.ZERO; for (BigDecimal value : values) { sum = sum.add(value); } BigDecimal mean = sum.divide(new BigDecimal(values.size()), MathContext.DECIMAL128); // è®¡ç®æ¯ä¸ªæ°å¼ä¸å¹³åå¼çå·®çå¹³æ¹ BigDecimal squaredDifferenceSum = BigDecimal.ZERO; for (BigDecimal value : values) { BigDecimal difference = value.subtract(mean); BigDecimal squaredDifference = difference.multiply(difference); squaredDifferenceSum = squaredDifferenceSum.add(squaredDifference); } // è®¡ç®æ åå·®ï¼æ³¨æè¿é使ç¨çæ¯æ ·æ¬æ å差计ç®å ¬å¼ BigDecimal variance = squaredDifferenceSum.divide(new BigDecimal(values.size() - 1), MathContext.DECIMAL128); BigDecimal stddev = sqrt(variance); // ä¿ç两ä½å°æ° return stddev.setScale(2, RoundingMode.HALF_UP); } private static BigDecimal sqrt(BigDecimal value) { // ä½¿ç¨ Heron's method 计ç®å¹³æ¹æ ¹ BigDecimal x = value; BigDecimal tolerance = new BigDecimal("1E-10"); BigDecimal guess = value.divide(BigDecimal.valueOf(2), MathContext.DECIMAL128); while (x.subtract(guess).abs().compareTo(tolerance) > 0) { x = guess; guess = x.add(value.divide(x, MathContext.DECIMAL128)).divide(new BigDecimal("2"), MathContext.DECIMAL128); } return guess; } /** * *****æ ¼å¼ååæ®µ**** * @param dataAnalysisDto */ private void formatDataAnalysisDto(DataAnalysisDto dataAnalysisDto) { // æ ¼å¼è¯å段, é¿å æ¥é if (StrUtil.isBlank(dataAnalysisDto.getOrderType())) { dataAnalysisDto.setOrderType("1"); } if (dataAnalysisDto.getOrderType().equals("2")) { // å£åº¦æ£éª dataAnalysisDto.setOrderType(InsOrderTypeConstants.QUARTERLY_TEST); } else { // è¿åæ£éª dataAnalysisDto.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY); } if (StrUtil.isBlank(dataAnalysisDto.getDateType())) { dataAnalysisDto.setDateType("1"); } if (StrUtil.isBlank(dataAnalysisDto.getGroupType())) { dataAnalysisDto.setGroupType("0"); } } } inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -387,7 +387,8 @@ ifsInventoryQuantityDto.setBeginDeclareDate(null); ifsInventoryQuantityDto.setEndDeclareDate(null); return standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate); IPage<IfsInventoryQuantitySupplierDto> ifsByOver = standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate); return ifsByOver; } /** inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,315 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.ruoyi.inspect.mapper.DataAnalysisMapper"> <!-- è·åæ¬å¨çåææä¿¡æ¯ --> <select id="getRawPassRateByBarChartByWeek" resultType="java.util.Map"> WITH RECURSIVE AllWeeks AS (SELECT 1 AS week UNION ALL SELECT week + 1 FROM AllWeeks WHERE week < 7) SELECT COALESCE(sub.sum, 0) AS sum, CASE am.week WHEN 1 THEN 'æææ¥' WHEN 2 THEN 'ææä¸' WHEN 3 THEN 'ææäº' WHEN 4 THEN 'ææä¸' WHEN 5 THEN 'ææå' WHEN 6 THEN 'ææäº' WHEN 7 THEN 'ææå ' END AS searchTime, COALESCE(sub.passRate, 0) AS passRate FROM AllWeeks am LEFT JOIN (select COUNT(*) sum, DAYOFWEEK(io1.send_time) searchTime, ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100, 2) passRate from ifs_inventory_quantity iiq LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id and io1.order_type = #{dto.orderType} and io1.state != -1 left join (select is2.ins_order_id, is2.sample_type, is2.model, is2.sample from ins_sample is2 group by is2.ins_order_id) ins on ins.ins_order_id = io1.id where iiq.is_finish = 1 and iiq.inspect_status not in (0, 3) and (io1.send_time between #{dto.beginDate} and #{dto.endDate}) <if test="dto.sampleName != null and dto.sampleName != ''"> and ins.sample like concat('%', #{dto.sampleName}, '%') </if> <if test="dto.modelName != null and dto.modelName != ''"> and ins.model like concat('%', #{dto.modelName}, '%') </if> <if test="dto.supplierName != null and dto.supplierName != ''"> and iiq.supplier_name like concat('%', #{dto.supplierName}, '%') </if> GROUP BY DAYOFWEEK(io1.send_time) having searchTime is not null) sub ON am.week = sub.searchTime WHERE am.week BETWEEN 1 AND 7 ORDER BY am.week </select> <!-- è·åæ¬æçåææä¿¡æ¯ --> <select id="getRawPassRateByBarChartByDay" resultType="java.util.Map"> select COUNT(*) sum, DATE_FORMAT(io1.send_time, '%Y-%m-%d') searchTime, ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100, 2) passRate from ifs_inventory_quantity iiq LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id and io1.order_type = #{dto.orderType} and io1.state != -1 left join (select is2.ins_order_id, is2.sample_type, is2.model, is2.sample from ins_sample is2 group by is2.ins_order_id) ins on ins.ins_order_id = io1.id where iiq.is_finish = 1 and iiq.inspect_status not in (0, 3) and (io1.send_time between #{dto.beginDate} and #{dto.endDate}) <if test="dto.sampleName != null and dto.sampleName != ''"> and ins.sample like concat('%', #{dto.sampleName}, '%') </if> <if test="dto.modelName != null and dto.modelName != ''"> and ins.model like concat('%', #{dto.modelName}, '%') </if> <if test="dto.supplierName != null and dto.supplierName != ''"> and iiq.supplier_name like concat('%', #{dto.supplierName}, '%') </if> GROUP BY DATE_FORMAT(io1.send_time, '%Y-%m-%d') having searchTime is not null order by searchTime </select> <!-- è·åæ¬å¹´çåææä¿¡æ¯ --> <select id="getRawPassRateByBarChartByYear" resultType="java.util.Map"> WITH RECURSIVE AllMonths AS (SELECT 1 AS month UNION ALL SELECT month + 1 FROM AllMonths WHERE month < 12) SELECT COALESCE(sub.sum, 0) AS sum, CASE am.month WHEN 1 THEN '1æ' WHEN 2 THEN '2æ' WHEN 3 THEN '3æ' WHEN 4 THEN '4æ' WHEN 5 THEN '5æ' WHEN 6 THEN '6æ' WHEN 7 THEN '7æ' WHEN 8 THEN '8æ' WHEN 9 THEN '9æ' WHEN 10 THEN '10æ' WHEN 11 THEN '11æ' WHEN 12 THEN '12æ' END AS searchTime, COALESCE(sub.passRate, 0) AS passRate FROM AllMonths am LEFT JOIN (select COUNT(*) sum, DATE_FORMAT(io1.send_time, '%m') searchTime, ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100, 2) passRate from ifs_inventory_quantity iiq LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id and io1.order_type = #{dto.orderType} and io1.state != -1 left join (select is2.ins_order_id, is2.sample_type, is2.model, is2.sample from ins_sample is2 group by is2.ins_order_id) ins on ins.ins_order_id = io1.id where iiq.is_finish = 1 and iiq.inspect_status not in (0, 3) and (io1.send_time between #{dto.beginDate} and #{dto.endDate}) <if test="dto.sampleName != null and dto.sampleName != ''"> and ins.sample like concat('%', #{dto.sampleName}, '%') </if> <if test="dto.modelName != null and dto.modelName != ''"> and ins.model like concat('%', #{dto.modelName}, '%') </if> <if test="dto.supplierName != null and dto.supplierName != ''"> and iiq.supplier_name like concat('%', #{dto.supplierName}, '%') </if> GROUP BY DATE_FORMAT(io1.send_time, '%Y-%m') having searchTime is not null) sub ON am.month = sub.searchTime WHERE am.month BETWEEN 1 AND 12 ORDER BY am.month </select> <!-- æ¥ç忿饼ç¶å¾ --> <select id="getRawPassRateByCake" resultType="java.util.Map"> select COUNT(*) sum, (COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) qualified, (COUNT(*) - SUM(CASE WHEN inspect_status = 1 THEN 1 ELSE 0 END)) unQualified, ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100, 2) AS passRate from ifs_inventory_quantity iiq LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id and io1.order_type = #{dto.orderType} and io1.state != -1 left join (select is2.ins_order_id, is2.sample_type, is2.model, is2.sample from ins_sample is2 group by is2.ins_order_id) ins on ins.ins_order_id = io1.id where iiq.is_finish = 1 and iiq.inspect_status not in (0, 3) and (io1.send_time between #{dto.beginDate} and #{dto.endDate}) <if test="dto.sampleName != null and dto.sampleName != ''"> and ins.sample like concat('%', #{dto.sampleName}, '%') </if> <if test="dto.modelName != null and dto.modelName != ''"> and ins.model like concat('%', #{dto.modelName}, '%') </if> <if test="dto.supplierName != null and dto.supplierName != ''"> and iiq.supplier_name like concat('%', #{dto.supplierName}, '%') </if> </select> <select id="getRawProductAnalysisAllSample" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto"> select iiq.*, io1.entrust_code, io1.id enter_order_id, ins.id sample_id, ins.sample_type, ins.sample sample_name, ins.model sample_model, io1.send_time from ifs_inventory_quantity iiq LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id and io1.order_type = #{dto.orderType} and io1.state != -1 left join ins_sample ins on ins.ins_order_id = io1.id where iiq.is_finish = 1 and iiq.inspect_status not in (0, 3) <if test="dto.beginDate != null and dto.beginDate != '' and dto.endDate != null and dto.endDate != ''"> and (io1.send_time between #{dto.beginDate} and #{dto.endDate}) </if> <if test="dto.sampleName != null and dto.sampleName != ''"> and ins.sample like concat('%', #{dto.sampleName}, '%') </if> <if test="dto.modelName != null and dto.modelName != ''"> and ins.model like concat('%', #{dto.modelName}, '%') </if> <if test="dto.supplierName != null and dto.supplierName != ''"> and iiq.supplier_name like concat('%', #{dto.supplierName}, '%') </if> </select> <!-- æ¥è¯¢æ£æµé¡¹éå --> <select id="getRawProductAnalysisList" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto"> select iiq.*, io1.entrust_code, io1.id enter_order_id, ins.id sample_id, ins.sample_type, ins.sample sample_name, ins.model sample_model, u.name user_name, io1.send_time from ifs_inventory_quantity iiq LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id and io1.order_type = #{dto.orderType} and io1.state != -1 left join user u on io1.create_user = u.id left join (select is2.ins_order_id, is2.sample_type, is2.sample_code, is2.model, is2.sample, is2.id from ins_sample is2 group by is2.ins_order_id) ins on ins.ins_order_id = io1.id where iiq.is_finish = 1 and iiq.inspect_status not in (0, 3) <if test="dto.beginDate != null and dto.beginDate != '' and dto.endDate != null and dto.endDate != ''"> and (io1.send_time between #{dto.beginDate} and #{dto.endDate}) </if> <if test="dto.sampleName != null and dto.sampleName != ''"> and ins.sample like concat('%', #{dto.sampleName}, '%') </if> <if test="dto.modelName != null and dto.modelName != ''"> and ins.model like concat('%', #{dto.modelName}, '%') </if> <if test="dto.supplierName != null and dto.supplierName != ''"> and iiq.supplier_name like concat('%', #{dto.supplierName}, '%') </if> </select> <select id="getItemValueByOrderIds" resultType="com.ruoyi.inspect.vo.RawMaterialSupplierVo"> select io2.id orderId, io2.entrust_code, ins.sample, ins.model, iiq.supplier_name, (select ip.`last_value` from ins_product ip where concat(ip.inspection_item, ip.inspection_item_subclass) = #{itemName} and ip.ins_sample_id = ins.id limit 1) lastValue from ins_order io2 left join ifs_inventory_quantity iiq on io2.ifs_inventory_id = iiq.id left join (select is2.ins_order_id, is2.sample_type, is2.sample_code, is2.model, is2.sample, is2.id from ins_sample is2 group by is2.ins_order_id) ins on ins.ins_order_id = io2.id where io2.id in <foreach collection="insOrderIds" index="index" open="(" separator="," close=")" item="val"> #{val} </foreach> </select> <!-- æ¥è¯¢æ¬æä¸ä¸æåæ ¼çå¯¹æ¯ --> <select id="getRawUpMonth" resultType="java.util.Map"> select DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') as month, (select ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100, 2) passRate from ifs_inventory_quantity iiq LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id and io1.order_type = 'è¿åæ£éª' and io1.state != -1 where iiq.is_finish = 1 and iiq.inspect_status not in (0, 3) and (io1.send_time between DATE_FORMAT(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH), '%Y-%m-%d %H:%i:%s') and DATE_FORMAT(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), '%Y-%m-%d 23:59:59'))) passRate UNION ALL select DATE_FORMAT(CURRENT_DATE, '%Y-%m') as month, (select ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100, 2) passRate from ifs_inventory_quantity iiq LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id and io1.order_type = 'è¿åæ£éª' and io1.state != -1 where iiq.is_finish = 1 and iiq.inspect_status not in (0, 3) and (io1.send_time between DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY), '%Y-%m-%d 00:00:00') and DATE_FORMAT(LAST_DAY(CURDATE()), '%Y-%m-%d 23:59:59'))) passRate </select> <!-- æ¥è¯¢æ¬ææ£éªç±»å --> <select id="getOrderTypeCookie" resultType="java.util.Map"> select sum(order_type = 'æ½æ£') spotCheck, sum(order_type = 'Customer-ordered test') customer, sum(order_type = 'è¿åæ£éª') enter, sum(order_type = 'Quarterly inspection') quarterly from ins_order where state != -1 and (send_time between DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH) + INTERVAL 1 DAY, '%Y-%m-%d 00:00:00') and DATE_FORMAT(LAST_DAY(NOW()), '%Y-%m-%d 23:59:59')) </select> </mapper> performance-server/src/main/java/com/ruoyi/performance/controller/AuxiliaryWorkingHoursController.java
@@ -38,7 +38,9 @@ @ApiOperation(value="å é¤è¾ å©å·¥æ¶") @DeleteMapping("/deleteAuxiliaryWorkingHours") public Result deleteAuxiliaryWorkingHours(Integer id){ return Result.success(auxiliaryWorkingHoursService.deleteAuxiliaryWorkingHours(id)); } @ApiOperation(value="ä¿®æ¹è¾ å©å·¥æ¶") performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursMapper.java
@@ -17,4 +17,12 @@ */ public interface AuxiliaryWorkingHoursMapper extends BaseMapper<AuxiliaryWorkingHours> { IPage<AuxiliaryWorkingHours> selectAuxiliaryWorkingHours(@Param("page") Page page, @Param("ew") QueryWrapper<AuxiliaryWorkingHours> ew); /** * ç»å®è¾ å©å·¥æ¶é ç½®çæ¥å·¥æ¶ç®¡çæ°é * * @param auxiliaryWorkingHoursId * @return */ int hourDayBindAuxiliaryCount(@Param("auxiliaryWorkingHoursId") Integer auxiliaryWorkingHoursId); } performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursServiceImpl.java
@@ -35,6 +35,11 @@ @Override public int deleteAuxiliaryWorkingHours(Integer id) { // 夿æ¥å·¥æ¶ç®¡ç䏿¯å¦å·²ç»å®å¾ å é¤è¾ å©å·¥æ¶é ç½® int count = auxiliaryWorkingHoursMapper.hourDayBindAuxiliaryCount(id); if(count > 0){ throw new RuntimeException("已卿¥å·¥æ¶ç®¡çä¸ç»å®ï¼ç¦æ¢å é¤ï¼"); } return auxiliaryWorkingHoursMapper.deleteById(id); } performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml
@@ -35,4 +35,13 @@ ${ew.customSqlSegment} </if> </select> <select id="hourDayBindAuxiliaryCount"> SELECT COUNT(*) FROM auxiliary_working_hours_day T1 LEFT JOIN auxiliary_working_hours T2 ON T1.number = T2.number WHERE T2.id = #{auxiliaryWorkingHoursId} </select> </mapper> ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java
@@ -96,5 +96,8 @@ @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "é¨é¨id") private Long departId; }