From c1df30be108a9f4bd443c9034e0d93657870fcde Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期一, 03 三月 2025 15:30:59 +0800 Subject: [PATCH] 代码迁移bug解决 --- inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml | 315 ++++++++++++++ inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java | 48 ++ performance-server/src/main/java/com/ruoyi/performance/controller/AuxiliaryWorkingHoursController.java | 2 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java | 3 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java | 613 +++++++++++++++++++++++++++ inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java | 74 +++ inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java | 3 inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java | 77 +++ performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml | 9 performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursServiceImpl.java | 5 cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java | 9 basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java | 2 inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java | 127 +++++ performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursMapper.java | 8 cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java | 4 15 files changed, 1,293 insertions(+), 6 deletions(-) diff --git a/basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java b/basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java index 3e84287..e927343 100644 --- a/basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java +++ b/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 { diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java b/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java index cf573fa..5e94d64 100644 --- a/cnas-manage/src/main/java/com/ruoyi/manage/controller/ManageRecordCancelController.java +++ b/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()); + } } - - - } diff --git a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java b/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java index 1f3a735..d466c02 100644 --- a/cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageRecordCancelServiceImpl.java +++ b/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(); diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/DataAnalysisController.java new file mode 100644 index 0000000..130e075 --- /dev/null +++ b/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)); + } + +} diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/DataAnalysisDto.java new file mode 100644 index 0000000..437239b --- /dev/null +++ b/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:瀛e害妫�楠�") + 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; + +} diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/DataAnalysisMapper.java new file mode 100644 index 0000000..6cb9f0a --- /dev/null +++ b/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(); +} diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/DataAnalysisService.java new file mode 100644 index 0000000..20e4a0c --- /dev/null +++ b/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); +} diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java new file mode 100644 index 0000000..33b9b28 --- /dev/null +++ b/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")) { + // 瀛e害妫�楠� + 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"); + } + } + +} diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java index 43fcea6..d3acb91 100644 --- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java +++ b/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; } /** diff --git a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml new file mode 100644 index 0000000..6e4e410 --- /dev/null +++ b/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> diff --git a/performance-server/src/main/java/com/ruoyi/performance/controller/AuxiliaryWorkingHoursController.java b/performance-server/src/main/java/com/ruoyi/performance/controller/AuxiliaryWorkingHoursController.java index 4afdf9f..3d0f996 100644 --- a/performance-server/src/main/java/com/ruoyi/performance/controller/AuxiliaryWorkingHoursController.java +++ b/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="淇敼杈呭姪宸ユ椂") diff --git a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursMapper.java b/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursMapper.java index d412e8b..8e8e6e3 100644 --- a/performance-server/src/main/java/com/ruoyi/performance/mapper/AuxiliaryWorkingHoursMapper.java +++ b/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); } diff --git a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursServiceImpl.java b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursServiceImpl.java index 9863d69..9bb9ac7 100644 --- a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryWorkingHoursServiceImpl.java +++ b/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); } diff --git a/performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml b/performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml index 0c4fd2c..1ff785f 100644 --- a/performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml +++ b/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> diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java index eb50fe3..e5f795a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java +++ b/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; + } -- Gitblit v1.9.3