diff --git a/klp-common/src/main/java/com/klp/common/core/domain/event/OperLogEvent.java b/klp-common/src/main/java/com/klp/common/core/domain/event/OperLogEvent.java index efff5115a..a983c5c35 100644 --- a/klp-common/src/main/java/com/klp/common/core/domain/event/OperLogEvent.java +++ b/klp-common/src/main/java/com/klp/common/core/domain/event/OperLogEvent.java @@ -96,6 +96,11 @@ public class OperLogEvent implements Serializable { */ private String errorMsg; + /** + * 页面路由 + */ + private String operPage; + /** * 操作时间 */ diff --git a/klp-framework/src/main/java/com/klp/framework/aspectj/LogAspect.java b/klp-framework/src/main/java/com/klp/framework/aspectj/LogAspect.java index 9444aa196..5c6165320 100644 --- a/klp-framework/src/main/java/com/klp/framework/aspectj/LogAspect.java +++ b/klp-framework/src/main/java/com/klp/framework/aspectj/LogAspect.java @@ -72,6 +72,8 @@ public class LogAspect { String ip = ServletUtils.getClientIP(); operLog.setOperIp(ip); operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255)); + // 从请求头获取前端页面路由 + operLog.setOperPage(StringUtils.substring(ServletUtils.getRequest().getHeader("X-Page-Route"), 0, 255)); operLog.setOperName(LoginHelper.getUsername()); if (e != null) { diff --git a/klp-system/src/main/java/com/klp/system/domain/SysOperLog.java b/klp-system/src/main/java/com/klp/system/domain/SysOperLog.java index 2fc29e19f..631e94638 100644 --- a/klp-system/src/main/java/com/klp/system/domain/SysOperLog.java +++ b/klp-system/src/main/java/com/klp/system/domain/SysOperLog.java @@ -133,6 +133,12 @@ public class SysOperLog implements Serializable { @ExcelProperty(value = "操作时间") private Date operTime; + /** + * 页面路由 + */ + @ExcelProperty(value = "页面路由") + private String operPage; + /** * 请求参数 */ diff --git a/klp-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/klp-system/src/main/resources/mapper/system/SysOperLogMapper.xml index 81f07e5e7..c1a6f309b 100644 --- a/klp-system/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/klp-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -14,6 +14,7 @@ + diff --git a/klp-ui/src/api/l2/mill.js b/klp-ui/src/api/l2/mill.js new file mode 100644 index 000000000..0b100f817 --- /dev/null +++ b/klp-ui/src/api/l2/mill.js @@ -0,0 +1,26 @@ +import request from '@/utils/millRequest' + +// 当前卷 + 下一卷:L2真实数据 与 我们模型预测数据,四组一起返回 +export function getLatestMillData() { + return request({ + url: '/latest', + method: 'get' + }) +} + +// 单次预测(静态/序贯两种模式,见klp-ml-mill/api.py PredictRequest) +export function predictMill(data) { + return request({ + url: '/predict', + method: 'post', + data + }) +} + +// 服务健康检查 + 数据库摘要 +export function getMillHealth() { + return request({ + url: '/health', + method: 'get' + }) +} diff --git a/klp-ui/src/api/mes/qc/inspectionMain.js b/klp-ui/src/api/mes/qc/inspectionMain.js index d0b9f3a7f..b0af2194b 100644 --- a/klp-ui/src/api/mes/qc/inspectionMain.js +++ b/klp-ui/src/api/mes/qc/inspectionMain.js @@ -42,3 +42,12 @@ export function delInspectionMain(mainId) { method: 'delete' }) } + +// 批量新增检验主及明细,并更新申请单detailIds +export function batchInsertMainWithDetails(data) { + return request({ + url: '/wms/inspectionMain/batchInsertWithDetails', + method: 'post', + data: data + }) +} diff --git a/klp-ui/src/api/mes/qc/inspectionTensileDetail.js b/klp-ui/src/api/mes/qc/inspectionTensileDetail.js index c790fda3e..86ee1fa98 100644 --- a/klp-ui/src/api/mes/qc/inspectionTensileDetail.js +++ b/klp-ui/src/api/mes/qc/inspectionTensileDetail.js @@ -42,3 +42,12 @@ export function delInspectionTensileDetail(detailId) { method: 'delete' }) } + +// 批量插入明细并更新申请单detailIds +export function batchInsertTensileDetails(data) { + return request({ + url: '/wms/inspectionTensileDetail/batchInsertDetails', + method: 'post', + data: data + }) +} diff --git a/klp-ui/src/utils/millRequest.js b/klp-ui/src/utils/millRequest.js new file mode 100644 index 000000000..32c38dc94 --- /dev/null +++ b/klp-ui/src/utils/millRequest.js @@ -0,0 +1,41 @@ +import axios from 'axios' +import { Message } from 'element-ui' + +// 酸轧六机架轧制模型服务(klp-ml-mill FastAPI)专用请求实例。 +// 这是一套独立的 Python 服务,不走若依后端的 {code,msg,data} 包装协议, +// 直接返回业务 JSON,所以单独起一个 axios 实例,不复用 utils/request.js 的响应拦截逻辑。 +const service = axios.create({ + baseURL: '/mill-api', + timeout: 60000, + headers: { + 'Content-Type': 'application/json;charset=utf-8', + // 临时鉴权Key,服务端在请求头 X-API-Key 校验(见 klp-ml-mill/api.py)。 + // 值不写死在代码里,从 VUE_APP_MILL_API_KEY 读(见 klp-ui/.env.local,未入库)。 + 'X-API-Key': process.env.VUE_APP_MILL_API_KEY || '' + } +}) + +if (!process.env.VUE_APP_MILL_API_KEY) { + // eslint-disable-next-line no-console + console.warn('[millRequest] 未配置 VUE_APP_MILL_API_KEY,模型服务接口会被拒绝(401)。' + + '请在 klp-ui/.env.local 里设置该变量。') +} + +service.interceptors.response.use( + res => res.data, + error => { + let message = error.message || '请求失败' + if (error.response) { + const detail = error.response.data && error.response.data.detail + message = detail || `模型服务接口异常(${error.response.status})` + } else if (message === 'Network Error') { + message = '无法连接模型服务(klp-ml-mill),请确认服务是否已启动' + } else if (message.includes('timeout')) { + message = '模型服务请求超时' + } + Message({ message, type: 'error', duration: 5000 }) + return Promise.reject(error) + } +) + +export default service diff --git a/klp-ui/src/utils/request.js b/klp-ui/src/utils/request.js index b1b7139ed..d9622e0c2 100644 --- a/klp-ui/src/utils/request.js +++ b/klp-ui/src/utils/request.js @@ -6,6 +6,7 @@ import errorCode from '@/utils/errorCode' import { tansParams, blobValidate } from "@/utils/klp"; import cache from '@/plugins/cache' import { saveAs } from 'file-saver' +import router from '@/router' let downloadLoadingInstance; // 是否显示重新登录 @@ -85,6 +86,10 @@ service.interceptors.request.use(config => { } } } + // 将当前页面路由放入请求头,供后端操作日志记录 + if (router.currentRoute && router.currentRoute.path) { + config.headers['X-Page-Route'] = router.currentRoute.path + } return config }, error => { console.log(error) diff --git a/klp-ui/src/views/mes/qc/inspectionSample/index.vue b/klp-ui/src/views/mes/qc/inspectionSample/index.vue index d422f538e..8f90eb489 100644 --- a/klp-ui/src/views/mes/qc/inspectionSample/index.vue +++ b/klp-ui/src/views/mes/qc/inspectionSample/index.vue @@ -142,7 +142,7 @@ + + diff --git a/klp-ui/src/views/micro/pages/acid/components/CoilModelTable.vue b/klp-ui/src/views/micro/pages/acid/components/CoilModelTable.vue new file mode 100644 index 000000000..4a9f16ccb --- /dev/null +++ b/klp-ui/src/views/micro/pages/acid/components/CoilModelTable.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/klp-ui/src/views/micro/pages/acid/components/Model.vue b/klp-ui/src/views/micro/pages/acid/components/Model.vue index 2bada5921..4c696464a 100644 --- a/klp-ui/src/views/micro/pages/acid/components/Model.vue +++ b/klp-ui/src/views/micro/pages/acid/components/Model.vue @@ -1,1359 +1,97 @@ diff --git a/klp-ui/src/views/micro/pages/acid/index.vue b/klp-ui/src/views/micro/pages/acid/index.vue index bb6e6b7ac..b6ea99577 100644 --- a/klp-ui/src/views/micro/pages/acid/index.vue +++ b/klp-ui/src/views/micro/pages/acid/index.vue @@ -26,6 +26,10 @@ 规程 + + + 模型 + 计划 @@ -39,7 +43,7 @@ 实绩 - + 配辊 @@ -54,10 +58,6 @@ app - - - 模型 -
@@ -98,7 +98,7 @@ export default { AcidTiming, TrackingView, ProcessSpec, - Model, + Model }, data() { return { @@ -166,6 +166,7 @@ export default { color: #606266; padding: 0 20px; font-size: 14px; + transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease; &:hover { background-color: #ecf5ff; @@ -176,11 +177,13 @@ export default { background-color: #ecf5ff; color: #409eff; border-right: 3px solid #409eff; + font-weight: 600; } i { font-size: 18px; margin-right: 8px; + transition: color 0.2s ease; } } } diff --git a/klp-ui/vue.config.js b/klp-ui/vue.config.js index b14f87c2e..48eec3ae6 100644 --- a/klp-ui/vue.config.js +++ b/klp-ui/vue.config.js @@ -54,6 +54,14 @@ module.exports = { ['^' + '/zinc-api']: '/api' } }, + // 酸轧六机架轧制模型服务(klp-ml-mill FastAPI),/predict /latest /sync /retrain /health + '/mill-api': { + target: `http://117.72.159.31:10001`, + changeOrigin: true, + pathRewrite: { + ['^' + '/mill-api']: '' + } + }, // 直接代理WebSocket相关路径 '/websocket': { target: `http://localhost:8080`, diff --git a/klp-wms/src/main/java/com/klp/controller/WmsInspectionMainController.java b/klp-wms/src/main/java/com/klp/controller/WmsInspectionMainController.java index 1c190b35e..a39eb5d79 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsInspectionMainController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsInspectionMainController.java @@ -3,6 +3,7 @@ package com.klp.controller; import java.util.List; import java.util.Arrays; +import com.klp.domain.bo.BatchInspectionMainBo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -96,4 +97,14 @@ public class WmsInspectionMainController extends BaseController { @PathVariable Long[] mainIds) { return toAjax(iWmsInspectionMainService.deleteWithValidByIds(Arrays.asList(mainIds), true)); } + + /** + * 批量新增检验主及明细,更新申请单detailIds为主键列表 + */ + @Log(title = "批量新增检验主", businessType = BusinessType.INSERT) + @PostMapping("/batchInsertWithDetails") + public R batchInsertWithDetails(@RequestBody BatchInspectionMainBo batchBo) { + return toAjax(iWmsInspectionMainService.batchInsertWithDetails( + batchBo.getMasterId(), batchBo.getApplicationId(), batchBo.getBoList())); + } } diff --git a/klp-wms/src/main/java/com/klp/controller/WmsInspectionTensileDetailController.java b/klp-wms/src/main/java/com/klp/controller/WmsInspectionTensileDetailController.java index 79acd62fe..a523d915f 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsInspectionTensileDetailController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsInspectionTensileDetailController.java @@ -3,6 +3,7 @@ package com.klp.controller; import java.util.List; import java.util.Arrays; +import com.klp.domain.bo.BatchInspectionTensileBo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -19,7 +20,9 @@ import com.klp.common.enums.BusinessType; import com.klp.common.utils.poi.ExcelUtil; import com.klp.domain.vo.WmsInspectionTensileDetailVo; import com.klp.domain.bo.WmsInspectionTensileDetailBo; +import com.klp.domain.bo.WmsInspectionTensileBo; import com.klp.service.IWmsInspectionTensileDetailService; +import com.klp.service.IWmsInspectionTensileService; import com.klp.common.core.page.TableDataInfo; /** @@ -96,4 +99,14 @@ public class WmsInspectionTensileDetailController extends BaseController { @PathVariable String[] detailIds) { return toAjax(iWmsInspectionTensileDetailService.deleteWithValidByIds(Arrays.asList(detailIds), true)); } + + /** + * 批量插入明细并更新申请单detailIds + */ + @Log(title = "批量插入拉伸试验明细", businessType = BusinessType.INSERT) + @PostMapping("/batchInsertDetails") + public R batchInsertDetails(@RequestBody BatchInspectionTensileBo bo) { + return toAjax(iWmsInspectionTensileDetailService.batchInsertDetails( + bo.getMasterId(), bo.getApplicationId(), bo.getDetailList())); + } } diff --git a/klp-wms/src/main/java/com/klp/domain/bo/BatchInspectionMainBo.java b/klp-wms/src/main/java/com/klp/domain/bo/BatchInspectionMainBo.java new file mode 100644 index 000000000..608496b5e --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/BatchInspectionMainBo.java @@ -0,0 +1,11 @@ +package com.klp.domain.bo; + +import java.util.List; +import lombok.Data; + +@Data +public class BatchInspectionMainBo { + private Long masterId; + private Long applicationId; + private List boList; +} diff --git a/klp-wms/src/main/java/com/klp/domain/bo/BatchInspectionTensileBo.java b/klp-wms/src/main/java/com/klp/domain/bo/BatchInspectionTensileBo.java new file mode 100644 index 000000000..bf4dc43a0 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/BatchInspectionTensileBo.java @@ -0,0 +1,12 @@ +package com.klp.domain.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class BatchInspectionTensileBo { + private Long masterId; + private Long applicationId; + private List detailList; +} diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsInspectionMainBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsInspectionMainBo.java index 7b3de4d49..ec475247a 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsInspectionMainBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsInspectionMainBo.java @@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.*; import java.util.Date; +import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; @@ -74,5 +75,10 @@ public class WmsInspectionMainBo extends BaseEntity { */ private String remark; + /** + * 检验项目明细列表 + */ + private List detailList; + } diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsInspectionTensileDetailBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsInspectionTensileDetailBo.java index ffce19e15..2ce7d49b9 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsInspectionTensileDetailBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsInspectionTensileDetailBo.java @@ -7,6 +7,8 @@ import javax.validation.constraints.*; import java.math.BigDecimal; import java.util.Date; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; /** @@ -265,4 +267,9 @@ public class WmsInspectionTensileDetailBo extends BaseEntity { private String remark; + /** + * 试验样品明细列表 + */ + private List detailList; + } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsInspectionMainService.java b/klp-wms/src/main/java/com/klp/service/IWmsInspectionMainService.java index 9436e4aff..fb3d3d003 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsInspectionMainService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsInspectionMainService.java @@ -46,4 +46,9 @@ public interface IWmsInspectionMainService { * 校验并批量删除检验主信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量新增检验主及明细,并更新申请单detailIds为主键列表 + */ + Boolean batchInsertWithDetails(Long masterId, Long applicationId, List boList); } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsInspectionTensileDetailService.java b/klp-wms/src/main/java/com/klp/service/IWmsInspectionTensileDetailService.java index 79aa0f980..3b3327af8 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsInspectionTensileDetailService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsInspectionTensileDetailService.java @@ -46,4 +46,6 @@ public interface IWmsInspectionTensileDetailService { * 校验并批量删除金属材料室温拉伸试验样品明细信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + Boolean batchInsertDetails(Long masterId, Long applicationId, List detailList); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsInspectionMainServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsInspectionMainServiceImpl.java index 9acf2a9cb..eb096a748 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsInspectionMainServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsInspectionMainServiceImpl.java @@ -2,15 +2,19 @@ package com.klp.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.utils.StringUtils; +import com.klp.domain.WmsInspectionApplication; +import com.klp.mapper.WmsInspectionApplicationMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.domain.bo.WmsInspectionMainBo; +import com.klp.domain.bo.WmsInspectionDetailBo; import com.klp.domain.vo.WmsInspectionMainVo; import com.klp.domain.vo.WmsInspectionDetailVo; import com.klp.domain.WmsInspectionMain; @@ -19,6 +23,7 @@ import com.klp.mapper.WmsInspectionMainMapper; import com.klp.mapper.WmsInspectionDetailMapper; import com.klp.service.IWmsInspectionMainService; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -37,6 +42,7 @@ public class WmsInspectionMainServiceImpl implements IWmsInspectionMainService { private final WmsInspectionMainMapper baseMapper; private final WmsInspectionDetailMapper detailMapper; + private final WmsInspectionApplicationMapper applicationMapper; /** * 查询检验主 @@ -107,6 +113,15 @@ public class WmsInspectionMainServiceImpl implements IWmsInspectionMainService { boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setMainId(add.getMainId()); + if (CollUtil.isNotEmpty(bo.getDetailList())) { + List detailEntities = new ArrayList<>(); + for (WmsInspectionDetailBo detailBo : bo.getDetailList()) { + detailBo.setMainId(add.getMainId()); + detailBo.setDetailId(null); + detailEntities.add(BeanUtil.toBean(detailBo, WmsInspectionDetail.class)); + } + detailMapper.insertBatch(detailEntities); + } } return flag; } @@ -118,7 +133,61 @@ public class WmsInspectionMainServiceImpl implements IWmsInspectionMainService { public Boolean updateByBo(WmsInspectionMainBo bo) { WmsInspectionMain update = BeanUtil.toBean(bo, WmsInspectionMain.class); validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + boolean flag = baseMapper.updateById(update) > 0; + if (flag && CollUtil.isNotEmpty(bo.getDetailList())) { + for (WmsInspectionDetailBo detailBo : bo.getDetailList()) { + detailBo.setMainId(bo.getMainId()); + WmsInspectionDetail detail = BeanUtil.toBean(detailBo, WmsInspectionDetail.class); + if (detailBo.getDetailId() != null) { + detailMapper.updateById(detail); + } else { + detail.setDetailId(null); + detailMapper.insert(detail); + } + } + } + return flag; + } + + /** + * 批量新增检验主及明细,并更新申请单detailIds为主键列表 + */ + @Override + public Boolean batchInsertWithDetails(Long masterId, Long applicationId, List boList) { + if (CollUtil.isEmpty(boList)) { + return false; + } + List mainIds = new ArrayList<>(); + for (WmsInspectionMainBo bo : boList) { + WmsInspectionMain add = BeanUtil.toBean(bo, WmsInspectionMain.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (!flag) { + return false; + } + bo.setMainId(add.getMainId()); + mainIds.add(add.getMainId()); + if (CollUtil.isNotEmpty(bo.getDetailList())) { + List detailEntities = new ArrayList<>(); + for (WmsInspectionDetailBo detailBo : bo.getDetailList()) { + detailBo.setMainId(add.getMainId()); + detailBo.setDetailId(null); + detailEntities.add(BeanUtil.toBean(detailBo, WmsInspectionDetail.class)); + } + detailMapper.insertBatch(detailEntities); + } + } + if (masterId != null && applicationId != null) { + String detailIds = mainIds.stream().map(String::valueOf).collect(Collectors.joining(",")); + applicationMapper.update(null, + new LambdaUpdateWrapper() + .eq(WmsInspectionApplication::getMainId, masterId) + .eq(WmsInspectionApplication::getApplicationId, applicationId) + // 同时还要修改状态字段为6 + .set(WmsInspectionApplication::getFlowStatus, 6) + .set(WmsInspectionApplication::getDetailIds, detailIds)); + } + return true; } /** diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsInspectionTensileDetailServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsInspectionTensileDetailServiceImpl.java index b10281de7..6efb4d576 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsInspectionTensileDetailServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsInspectionTensileDetailServiceImpl.java @@ -1,12 +1,16 @@ package com.klp.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.utils.StringUtils; +import com.klp.domain.WmsInspectionApplication; +import com.klp.mapper.WmsInspectionApplicationMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.domain.bo.WmsInspectionTensileDetailBo; @@ -15,9 +19,11 @@ import com.klp.domain.WmsInspectionTensileDetail; import com.klp.mapper.WmsInspectionTensileDetailMapper; import com.klp.service.IWmsInspectionTensileDetailService; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 金属材料室温拉伸试验样品明细Service业务层处理 @@ -31,6 +37,8 @@ public class WmsInspectionTensileDetailServiceImpl implements IWmsInspectionTens private final WmsInspectionTensileDetailMapper baseMapper; + private final WmsInspectionApplicationMapper applicationMapper; + /** * 查询金属材料室温拉伸试验样品明细 */ @@ -151,4 +159,35 @@ public class WmsInspectionTensileDetailServiceImpl implements IWmsInspectionTens } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 批量插入明细并更新申请单detailIds + */ + @Override + public Boolean batchInsertDetails(Long masterId, Long applicationId, List detailList) { + if (CollUtil.isEmpty(detailList)) { + return false; + } + List details = new ArrayList<>(); + for (WmsInspectionTensileDetailBo bo : detailList) { + bo.setDetailId(null); + details.add(BeanUtil.toBean(bo, WmsInspectionTensileDetail.class)); + } + boolean flag = baseMapper.insertBatch(details); + if (flag && masterId != null && applicationId != null) { + String detailIds = details.stream() + .map(WmsInspectionTensileDetail::getDetailId) + .collect(Collectors.joining(",")); + applicationMapper.update(null, + new LambdaUpdateWrapper() + .eq(WmsInspectionApplication::getMainId, masterId) + .eq(WmsInspectionApplication::getApplicationId, applicationId) + // 同时还要把状态字段改成6 + .set(WmsInspectionApplication::getFlowStatus, 6) + .set(WmsInspectionApplication::getDetailIds, detailIds)); + } + return flag; + } + + } diff --git a/script/docker/nginx/conf/nginx.conf b/script/docker/nginx/conf/nginx.conf index e9630aaf7..b1a677310 100644 --- a/script/docker/nginx/conf/nginx.conf +++ b/script/docker/nginx/conf/nginx.conf @@ -81,6 +81,15 @@ http { proxy_pass http://server/; } + # 酸轧六机架轧制模型服务(klp-ml-mill FastAPI) + location /mill-api/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://117.72.159.31:10001/; + } + # https 会拦截内链所有的 http 请求 造成功能无法使用 # 解决方案1 将 admin 服务 也配置成 https # 解决方案2 将菜单配置为外链访问 走独立页面 http 访问