From 01ed57def0d052ae87d95022013c64c760082610 Mon Sep 17 00:00:00 2001 From: zhuo <2089219845@qq.com> Date: 星期五, 28 三月 2025 10:34:19 +0800 Subject: [PATCH] 修改温度生成定时任务问题 --- inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java | 233 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 195 insertions(+), 38 deletions(-) diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java index 7e74e76..b57a72f 100644 --- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java +++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java @@ -2,6 +2,8 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; @@ -30,6 +32,7 @@ import com.ruoyi.basic.service.StandardTemplateService; import com.ruoyi.common.constant.DictDataConstants; import com.ruoyi.common.constant.InsOrderTypeConstants; +import com.ruoyi.common.constant.MenuJumpPathConstants; import com.ruoyi.common.core.domain.entity.Custom; import com.ruoyi.common.core.domain.entity.InformationNotification; import com.ruoyi.common.core.domain.entity.User; @@ -42,6 +45,7 @@ import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo; import com.ruoyi.inspect.vo.InsOrderPlanVO; +import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper; import com.ruoyi.performance.mapper.PerformanceShiftMapper; import com.ruoyi.performance.mapper.ShiftTimeMapper; import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours; @@ -68,8 +72,10 @@ import java.math.RoundingMode; import java.nio.file.Files; import java.nio.file.Paths; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @@ -98,14 +104,9 @@ private InsOrderStateMapper insOrderStateMapper; @Resource private InsProductMapper insProductMapper; - @Resource - private ShiftTimeMapper shiftTimeMapper; - @Resource - private PerformanceShiftMapper performanceShiftMapper; + @Value("${wordUrl}") private String wordUrl; - @Value("${twoCode}") - private String twoCode; @Resource private InsReportMapper insReportMapper; @Resource @@ -116,6 +117,8 @@ private AuxiliaryOutputWorkingHoursService auxiliaryOutputWorkingHoursService; @Resource private AuxiliaryOutputWorkingHoursTemporaryService auxiliaryOutputWorkingHoursTemporaryService; + @Resource + private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper; @Resource private InformationNotificationService informationNotificationService; @Resource @@ -142,7 +145,7 @@ private InsOrderFactoryVerifyMapper insOrderFactoryVerifyMapper; @Resource private InsOrderFactoryVerifyItemService insOrderFactoryVerifyItemService; - + @Resource private SpotCheckQuarterItemMapper spotCheckQuarterItemMapper; @Resource @@ -228,17 +231,19 @@ // 鏌ヨ鍘傚瀵嗗害 String supplierDensity = ""; - SampleProductDto sampleProductDto = list.get(0); + if (CollectionUtils.isNotEmpty(list)) { + SampleProductDto sampleProductDto = list.get(0); - // 鍒ゆ柇鏈夋病鏈夌粦瀹氬瀷鍙� - String modelValue = insSampleMapper.selectSupplierDensityModel(sampleProductDto.getSample(), - order.getProduction(), - sampleProductDto.getModel()); - if (StringUtils.isNotBlank(modelValue)) { - supplierDensity = modelValue; - } else { - supplierDensity = insSampleMapper.selectSupplierDensity(sampleProductDto.getSample(), - order.getProduction()); + // 鍒ゆ柇鏈夋病鏈夌粦瀹氬瀷鍙� + String modelValue = insSampleMapper.selectSupplierDensityModel(sampleProductDto.getSample(), + order.getProduction(), + sampleProductDto.getModel()); + if (StringUtils.isNotBlank(modelValue)) { + supplierDensity = modelValue; + } else { + supplierDensity = insSampleMapper.selectSupplierDensity(sampleProductDto.getSample(), + order.getProduction()); + } } map.put("supplierDensity", supplierDensity); return map; @@ -492,6 +497,14 @@ insProductResultMapper.deleteById(insProductResults.get(i)); } } + + //鏌ヨ妫�楠屽崟淇℃伅 + // 娣诲姞宸ユ椂 + InsProduct finalInsProduct = insProductMapper.selectById(product.getId()); + threadPoolTaskExecutor.execute(() -> { + InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId()); + this.addAuxiliary(userId, finalInsProduct, insOrder); + }); } }); @@ -780,11 +793,13 @@ int count = 0; for (InsProduct product : insProducts) { count++; - str += "<br/>" + count + "锛�" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>"; - + str += (count != 0 ? "\n" : "") + count + "锛�" + + product.getInspectionItemClass() + " " + + product.getInspectionItem() + " " + + product.getInspectionItemSubclass(); } if (ObjectUtils.isNotEmpty(str)) { - throw new ErrorException("<strong>瀛樺湪寰呮楠岀殑椤圭洰锛�</strong><br/>" + str); + throw new ErrorException("瀛樺湪寰呮楠岀殑椤圭洰锛�" + str); } } @@ -810,7 +825,7 @@ info.setSenderId(userId); info.setConsigneeId(verifyUser); info.setViewStatus(false); - info.setJumpPath("b1-inspect-orderPlan-review"); + info.setJumpPath(MenuJumpPathConstants.INSPECTION_REVIEW); informationNotificationService.addInformationNotification(info); // 6.澶嶆牳浜�--鏂板妫�楠屽崟鐩稿叧璐熻矗浜� @@ -856,19 +871,19 @@ } // 12.娣诲姞宸ユ椂 - // 鍒犻櫎鍘熸湰璁㈠崟宸ユ椂 - auxiliaryOutputWorkingHoursService.remove(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery() - .eq(AuxiliaryOutputWorkingHours::getOrderId, orderId)); - // 鏌ヨ宸ユ椂鏆傚瓨 - List<AuxiliaryOutputWorkingHoursTemporary> hoursTemporaries = auxiliaryOutputWorkingHoursTemporaryService.list(Wrappers.<AuxiliaryOutputWorkingHoursTemporary>lambdaQuery() - .eq(AuxiliaryOutputWorkingHoursTemporary::getOrderId, orderId)); - List<AuxiliaryOutputWorkingHours> outputWorkingHours = hoursTemporaries.stream().map(hoursTemporary -> { - AuxiliaryOutputWorkingHours workingHours = new AuxiliaryOutputWorkingHours(); - BeanUtil.copyProperties(hoursTemporary, workingHours); - workingHours.setId(null); - return workingHours; - }).collect(Collectors.toList()); - auxiliaryOutputWorkingHoursService.saveBatch(outputWorkingHours); +// // 鍒犻櫎鍘熸湰璁㈠崟宸ユ椂 +// auxiliaryOutputWorkingHoursService.remove(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery() +// .eq(AuxiliaryOutputWorkingHours::getOrderId, orderId)); +// // 鏌ヨ宸ユ椂鏆傚瓨 +// List<AuxiliaryOutputWorkingHoursTemporary> hoursTemporaries = auxiliaryOutputWorkingHoursTemporaryService.list(Wrappers.<AuxiliaryOutputWorkingHoursTemporary>lambdaQuery() +// .eq(AuxiliaryOutputWorkingHoursTemporary::getOrderId, orderId)); +// List<AuxiliaryOutputWorkingHours> outputWorkingHours = hoursTemporaries.stream().map(hoursTemporary -> { +// AuxiliaryOutputWorkingHours workingHours = new AuxiliaryOutputWorkingHours(); +// BeanUtil.copyProperties(hoursTemporary, workingHours); +// workingHours.setId(null); +// return workingHours; +// }).collect(Collectors.toList()); +// auxiliaryOutputWorkingHoursService.saveBatch(outputWorkingHours); // 13.娣诲姞璁㈠崟璐圭敤缁熻淇℃伅 List<InsProduct> productList = insProductMapper.selectProductByOrderId(orderId); @@ -924,6 +939,38 @@ // 鍒ゆ柇鏄惁鏈変笉鍚堟牸, 鏈変笉鍚堟牸涓嶈兘绉诲簱 // todo: ifs绉诲簱 insReportService.isRawMaterial(order); + + // 16 鍒ゆ柇褰撳墠鏍峰搧鏄惁涓哄師鏉愭枡, 鍘熸潗鏂欓渶瑕佽繘琛屾暟鎹垎鏋�, 鍒ゆ柇涔嬪墠10鏉℃暟鎹悓涓�涓緵搴斿晢, 鍚屼竴涓楠岄」鐨勫亸宸槸鍚﹁秴杩�10% + // 鏌ヨifs淇℃伅鑾峰彇鑾峰彇鍓�10涓緵搴斿晢涓�鏍风殑, 妫�楠岄」涓�鏍蜂俊鎭� +// threadPoolTaskExecutor.execute(() -> { +// +// for (InsProduct insProduct : productList) { +// // todo: 鏆傛椂鍒ゆ柇鏄惁鏄�佸寲 +// if (insProduct.getInspectionItem().contains("鑰佸寲")) { +// List<InsProductAnalysisDto> insProductAnalysisDtoList = insProductMapper.selectAnalysis(insProduct, ifsInventoryQuantity.getSupplierName()); +// +// if (insProductAnalysisDtoList.size() < 10) { +// continue; +// } +// +// // 鍒ゆ柇褰撳墠妫�娴嬮」鏄惁鍋忓樊瓒呰繃10% +// List<String> laseValueList = insProductAnalysisDtoList.stream().map(InsProductAnalysisDto::getLastValue) +// .collect(Collectors.toList()); +// +// double deviation = isDeviationOverTenPercent(laseValueList, insProduct.getLastValue()); +// // 鍒ゆ柇鍋忓樊鏄惁澶т簬10 +// if (deviation > 10) { +// // 鍙戦�侀�氱煡, 骞朵笖娣诲姞鏁版嵁 +// +// +// +// +// } +// } +// } +// }); + + } else { // 淇敼鎴愬搧鐘舵�� // 鍒ゆ柇鏄惁鏈変笉鍚堟牸 @@ -942,6 +989,33 @@ return 1; } + /** + * *****璁$畻鍋忓樊**** + * @param data + * @param targetStr + * @return + */ + public static double isDeviationOverTenPercent(List<String> data, String targetStr) { + if (data.isEmpty()) { + return 0; + } + List<Double> doubleData = data.stream() + .map(Double::parseDouble) + .collect(Collectors.toList()); + double sum = doubleData.stream().mapToDouble(Double::doubleValue).sum(); + double average = sum / doubleData.size(); + + double target = Double.parseDouble(targetStr); + double deviationPercent = Math.abs(target - average) / average * 100; + + return deviationPercent; + } + + /** + * ******鍘熷璁板綍妯℃澘澶嶅埗***** + * @param orderId + * @param ids + */ private void templateCopy(Integer orderId, List<Integer> ids) { // 鍒犻櫎鍘熸湰妯℃澘 insOrderStandardTemplateService.remove(Wrappers.<InsOrderStandardTemplate>lambdaQuery() @@ -1889,10 +1963,6 @@ ConfigureBuilder builder = Configure.builder(); builder.useSpringEL(true); - // 鑾峰彇褰撳墠鏃堕棿 - LocalDate currentDate = LocalDate.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - String formattedDate = currentDate.format(formatter); InputStream inputStream = this.getClass().getResourceAsStream("/static/small-report-template.docx"); XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render( @@ -2429,6 +2499,7 @@ InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx"); Configure configure = Configure.builder() .bind("deviceList", new HackLoopTableRenderPolicy()) + .useSpringEL(true) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( @@ -4294,4 +4365,90 @@ .set(SpotCheckQuarterItem::getResult, unqualifiedCount.equals(0L) ? "鍚堟牸" : "涓嶅悎鏍�")); } + /** + * 娣诲姞宸ユ椂 + * @param userId + * @param insProduct + * @param insOrder + */ + private synchronized void addAuxiliary(Integer userId, InsProduct insProduct, InsOrder insOrder) { + if (insProduct.getIsBinding().equals(1)) { + return; + } + + //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮 + LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); + + //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜� + List<AuxiliaryOutputWorkingHours> count2s = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery() + .eq(AuxiliaryOutputWorkingHours::getCheck, userId) + .eq(AuxiliaryOutputWorkingHours::getInsProductId, insProduct.getId())); + if (CollectionUtils.isNotEmpty(count2s)) { + auxiliaryOutputWorkingHoursMapper.deleteBatchIds(count2s.stream().map(auxiliaryOutputWorkingHours -> auxiliaryOutputWorkingHours.getId()).collect(Collectors.toList())); + } + if (ObjectUtils.isNotEmpty(insProduct.getManHour()) && StringUtils.isNotBlank(insProduct.getLastValue())) { + AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours(); + auxiliaryOutputWorkingHours.setInspectionItemClass(insProduct.getInspectionItemClass());//妫�娴嬮」鍒嗙被 + auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//妫�娴嬬埗椤� + auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//妫�娴嬪瓙椤� + auxiliaryOutputWorkingHours.setSample(insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode());//鏍峰搧缂栧彿 + auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//璁㈠崟id + auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙� + auxiliaryOutputWorkingHours.setWorkTime(insProduct.getManHour());//闈炲姞鐝伐鏃� + auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲� + auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//浜ч噺宸ユ椂 + auxiliaryOutputWorkingHours.setManHourGroup(insProduct.getManHourGroup());//宸ユ椂鍒嗙粍 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡 + LocalDateTime localDateTime = LocalDateTime.now(); + DateTime parse = DateUtil.parse(localDateTime.format(formatter)); + auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡 + auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ + auxiliaryOutputWorkingHours.setCheck(userId);//妫�娴嬩汉 + auxiliaryOutputWorkingHours.setPrice(insProduct.getPrice());//鍗曚环 + auxiliaryOutputWorkingHours.setSampleId(insProduct.getInsSampleId());//鏍峰搧id + auxiliaryOutputWorkingHours.setInsProductId(insProduct.getId());//妫�楠岄」id + + auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours); + + } + } + + + public static String getWeek(String dayStr) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date date = sdf.parse(dayStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + int day = calendar.get(Calendar.DAY_OF_MONTH); + return getWeekDay(dayOfWeek); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String getWeekDay(int dayOfWeek) { + switch (dayOfWeek) { + case Calendar.MONDAY: + return "鍛ㄤ竴"; + case Calendar.TUESDAY: + return "鍛ㄤ簩"; + case Calendar.WEDNESDAY: + return "鍛ㄤ笁"; + case Calendar.THURSDAY: + return "鍛ㄥ洓"; + case Calendar.FRIDAY: + return "鍛ㄤ簲"; + case Calendar.SATURDAY: + return "鍛ㄥ叚"; + case Calendar.SUNDAY: + return "鍛ㄦ棩"; + default: + return "鏈煡"; + } + } } -- Gitblit v1.9.3