diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IBasicClazzClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IBasicClazzClient.java deleted file mode 100644 index 9b150c86..00000000 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IBasicClazzClient.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.springblade.desk.basic.feign; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.desk.basic.pojo.entity.BasicClazz; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; - -import java.util.List; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:20 - */ -@FeignClient( - value = AppConstant.APPLICATION_DESK_NAME -) -public interface IBasicClazzClient { - - String API_PREFIX = "/feign/client/basic/basicClazz"; - - String LIST = API_PREFIX + "/list"; - - /** - * 查询 - * @param lambdaQueryWrapper - * @return - */ - @GetMapping(LIST) - List list(LambdaQueryWrapper lambdaQueryWrapper); -} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/energy/feign/IHttpRequestClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/energy/feign/IHttpRequestClient.java deleted file mode 100644 index ef0adf0c..00000000 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/energy/feign/IHttpRequestClient.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.springblade.desk.energy.feign; - -import com.alibaba.fastjson.JSONObject; -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.core.secure.BladeUser; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:47 - */ -@FeignClient( - value = AppConstant.APPLICATION_DESK_NAME -) -public interface IHttpRequestClient { - - String API_PREFIX = "/feign/client/energy/httpRequest"; - - String LAUNCH_TEST = API_PREFIX + "/launchTest"; - - /** - * 发起测试 - * @param batchNo 批次号 - * @param quantity 数量 - * @param woCode 工单号 - * @param remark 备注 - * @param value 值 - * @param label 标签 - * @param i 次数 - * @param curUserInfo 当前用户信息 - * @param partCode 零件号 - * @param partName 零件名称 - * @param productType 产品类型 - * @param pptCode 产品型号 - * @return 返回结果 - * @throws Exception - */ - @PostMapping(LAUNCH_TEST) - JSONObject launchTest(String batchNo, Integer quantity, String woCode, String remark, String value, String label, int i, BladeUser curUserInfo, String partCode, String partName, String productType, String pptCode) throws Exception; -} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IWorkPlanClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IWorkPlanClient.java deleted file mode 100644 index e7fe83a6..00000000 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IWorkPlanClient.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.springblade.desk.produce.feign; - -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.desk.produce.pojo.entity.WorkPlan; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:38 - */ -@FeignClient( - value = AppConstant.APPLICATION_DESK_NAME -) -public interface IWorkPlanClient { - - String API_PREFIX = "/feign/client/QA/workPlan"; - - String SELECT_BY_ID = API_PREFIX + "/selectById"; - - /** - * 查询车间计划 - * @param wpId id - * @return 车间计划 - */ - @GetMapping(SELECT_BY_ID) - WorkPlan selectById(Long wpId); -} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/IPlanTestClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/IPlanTestClient.java deleted file mode 100644 index 35392333..00000000 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/IPlanTestClient.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.springblade.desk.quality.feign; - -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.desk.quality.pojo.entity.PlanTest; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; - -import java.util.Date; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:28 - */ -@FeignClient( - value = AppConstant.APPLICATION_DESK_NAME -) -public interface IPlanTestClient { - - String API_PREFIX = "/feign/client/QA/planTest"; - - String GET_LATEST_DATA = API_PREFIX + "/getLatestData"; - - String SAVE = API_PREFIX + "/save"; - - /** - * 获取最新的转试记录 - * @param currentDate 当前日期 - * @return 转试记录 - */ - @GetMapping(GET_LATEST_DATA) - PlanTest getLatestData(Date currentDate); - - /** - * 保存转试记录 - * @param planTest 转试记录 - */ - @PostMapping(SAVE) - void save(PlanTest planTest); -} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/IWorkPlanItemClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/IWorkPlanItemClient.java deleted file mode 100644 index 200c966e..00000000 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/IWorkPlanItemClient.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.springblade.desk.quality.feign; - -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.desk.quality.pojo.entity.WorkPlanItem; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; - -import java.util.List; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:11 - */ -@FeignClient( - value = AppConstant.APPLICATION_DESK_NAME -) -public interface IWorkPlanItemClient { - - String API_PREFIX = "/feign/client/QA/workPlanItem"; - - String LIST_BY_WO_ID = API_PREFIX + "/listByWoId"; - - /** - * 根据工单id查询工序检验项 - * @param woId 工单id - * @return 工序检验项 - */ - @GetMapping(LIST_BY_WO_ID) - List listByWoId(Long woId); -} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/BasicClazzClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/BasicClazzClient.java deleted file mode 100644 index 18f7f68c..00000000 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/BasicClazzClient.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.springblade.desk.basic.feign; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import io.swagger.v3.oas.annotations.Hidden; -import jakarta.annotation.Resource; -import org.springblade.desk.basic.pojo.entity.BasicClazz; -import org.springblade.desk.basic.service.IBasicClazzService; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:25 - */ -@RestController -@Hidden() -public class BasicClazzClient implements IBasicClazzClient{ - - @Resource - private IBasicClazzService basicClazzService; - - @Override - public List list(LambdaQueryWrapper lambdaQueryWrapper) { - return basicClazzService.list(lambdaQueryWrapper); - } -} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/feign/HttpRequestClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/feign/HttpRequestClient.java deleted file mode 100644 index 5c03a4f9..00000000 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/feign/HttpRequestClient.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.springblade.desk.energy.feign; - -import com.alibaba.fastjson.JSONObject; -import io.swagger.v3.oas.annotations.Hidden; -import jakarta.annotation.Resource; -import org.springblade.core.secure.BladeUser; -import org.springblade.desk.energy.util.HttpRequestService; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:54 - */ -@RestController -@Hidden() -public class HttpRequestClient implements IHttpRequestClient{ - - @Resource - private HttpRequestService httpRequestService; - - @Override - public JSONObject launchTest(String batchNo, Integer quantity, String woCode, String remark, String value, String label, int i, BladeUser curUserInfo, String partCode, String partName, String productType, String pptCode) throws Exception { - return httpRequestService.launchTest(batchNo,quantity,woCode,remark,value,label,i,curUserInfo,partCode,partName,productType,pptCode); - } -} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/WorkPlanClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/WorkPlanClient.java deleted file mode 100644 index cc5046ff..00000000 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/WorkPlanClient.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.springblade.desk.produce.feign; - -import io.swagger.v3.oas.annotations.Hidden; -import jakarta.annotation.Resource; -import org.springblade.desk.produce.pojo.entity.WorkPlan; -import org.springblade.desk.produce.service.IWorkPlanService; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:41 - */ -@RestController -@Hidden() -public class WorkPlanClient implements IWorkPlanClient{ - - @Resource - private IWorkPlanService workPlanService; - - @Override - public WorkPlan selectById(Long wpId) { - return workPlanService.getById(wpId); - } -} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index 1f677bac..69a561e7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -2,7 +2,9 @@ package org.springblade.desk.produce.service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; +import org.springblade.core.secure.BladeUser; import org.springblade.core.tool.api.R; +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; import org.springblade.desk.produce.pojo.dto.*; import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.vo.BatchPrepareVO; @@ -238,4 +240,32 @@ public interface IWorkOrderService extends BaseService { List findCubByYoId(Long yoId); void saveAdjust(Long woId, Long oldTsId, Long newTsId, Long userId); + + /** + * 根据订单id查询 + * @param woId 订单id + * @return 是否符合转试条件 + */ + Boolean isTransferTest(Long woId); + + /** + * 试转项目列表 + * @return 试转项目列表 + */ + List> trialItemList(); + + /** + * 发起试转 + * @param data 试转数据 + * @param user 用户 + * @throws Exception + */ + void launchTest(Map data, BladeUser user) throws Exception; + + /** + * 查询分配信息 + * @param dto 查询条件 + * @return 分配信息 + */ + Map queryAllocationMess(AllocationMessPageDTO dto); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index 115880e4..c2cb00d1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -1,6 +1,8 @@ package org.springblade.desk.produce.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -13,6 +15,7 @@ import net.sourceforge.barbecue.Barcode; import net.sourceforge.barbecue.BarcodeFactory; import net.sourceforge.barbecue.BarcodeImageHandler; import org.apache.commons.lang3.StringUtils; +import org.springblade.common.exception.BusinessException; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; @@ -21,6 +24,7 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.desk.basic.constant.FlowConst; +import org.springblade.desk.basic.pojo.entity.BasicClazz; import org.springblade.desk.basic.pojo.entity.BsAssignEntity; import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity; import org.springblade.desk.basic.pojo.entity.WorkCenter; @@ -36,6 +40,9 @@ import org.springblade.desk.device.pojo.entity.RackSetEntity; import org.springblade.desk.device.service.IEquipmentService; import org.springblade.desk.device.service.IFeiBaSetService; import org.springblade.desk.device.service.IRackSetService; +import org.springblade.desk.energy.util.HttpRequestService; +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; +import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; import org.springblade.desk.order.mapper.YieldOrderMapper; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; @@ -52,12 +59,14 @@ import org.springblade.desk.quality.mapper.InspectionTaskMapper; import org.springblade.desk.quality.pojo.entity.*; import org.springblade.desk.quality.service.*; import org.springblade.desk.util.date.DateUtils; +import org.springblade.erpdata.feign.IErpDataLogisticsClient; import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springblade.erpdata.feign.IErpDataProduceClient; import org.springblade.system.cache.DictCache; import org.springblade.system.cache.UserCache; import org.springblade.system.pojo.entity.User; import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -102,6 +111,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectWorkOrderPage(IPage page, WorkOrderDTO workOrder) { return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder)); @@ -2602,4 +2622,153 @@ public class WorkOrderServiceImpl extends BaseServiceImpl prWorkPlanItems = workPlanItemService.listByWoId(woId); + + // 没有试验项目,不能转试 + if (!(prWorkPlanItems != null && !prWorkPlanItems.isEmpty())) { + return false; + } + + boolean flag = false; + for (WorkPlanItem prWorkPlanItem : prWorkPlanItems) { + // 如果试验项目中包含 承压检测 则代表可以发起转试 24/8/5 牛营杰确认 + if ("承压检测".equals(prWorkPlanItem.getItemName())) { + if (prWorkPlanItem.getCheckResult() == -1) { + flag = true; + } + } + } + return flag; + } + + @Override + public List> trialItemList() { + // 构造 SQL 查询语句 + List basicClazzList = basicClazzService.list(new LambdaQueryWrapper() + .eq(BasicClazz::getBizType, 11)); + List nameList = basicClazzList.stream().map(BasicClazz::getName).collect(Collectors.toList()); + List> mapList = erpDataProduceClient.trialItemList(nameList).getData(); + // 转换查询结果 + List> result = new ArrayList<>(); + if (mapList != null && !mapList.isEmpty()) { + for (Map map : mapList) { + Map item = new HashMap<>(); + item.put("value", map.get("key") != null ? map.get("key") : ""); + item.put("label", map.get("value") != null ? map.get("value") : ""); + result.add(item); + } + } + return result; + } + + @Override + public Map queryAllocationMess(AllocationMessPageDTO dto) { + List allocationMessList = erpDataLogisticsClient.queryAllocationMess(dto).getData(); + int totalAllocationMessNum = erpDataLogisticsClient.queryAllocationMessNum(dto).getData(); + Map result = new HashMap<>(3); + result.put("current",dto.getPageNum()); + result.put("record",allocationMessList); + result.put("total",totalAllocationMessNum); + return result; + } + + @Override + public void launchTest(Map data, BladeUser user) throws Exception { + // 提取参数 + String batchNo = (String) data.get("batchNo"); + Integer quantity = Integer.parseInt(data.get("quantity").toString()); + String woCode = (String) data.get("woCode"); + String remark = (String) data.get("remark"); + String partCode = (String) data.get("partCode"); + String productType = (String) data.get("productType"); + String partName = (String) data.get("partName"); + Object testListObj = data.get("testList"); + JSONArray testList = (JSONArray) JSON.toJSON(testListObj); + Long woId = Long.parseLong(data.get("woId").toString()); + + // 生成转试单号 + String pptCode = generatePptCode(); + + // 获取相关工序 + WorkPlan workPlan = findRelevantWorkPlan(woId); + + // 处理每个测试项 + processTestItems(testList, batchNo, quantity, woCode, remark, partCode, partName, productType, pptCode, workPlan, user); + } + + private String generatePptCode() { + Calendar c = Calendar.getInstance(); + Date currentDate = new Date(); + c.setTime(currentDate); + String year = String.valueOf(c.get(Calendar.YEAR)); + int month = c.get(Calendar.MONTH) + 1; + String formattedMonth = month < 10 ? "0" + month : String.valueOf(month); + + PlanTest latestData = planTestService.getLatestData(currentDate); + StringBuilder pptCode = new StringBuilder("LCR" + year + "-" + formattedMonth); + + if (latestData != null && latestData.getId() != null) { + if (org.apache.commons.lang3.StringUtils.isNotBlank(latestData.getCode())) { + String numStr = String.valueOf(Integer.parseInt(latestData.getCode().substring(10)) + 1); + pptCode.append("0".repeat(Math.max(0, 6 - numStr.length()))); + pptCode.append(numStr); + } + } else { + pptCode.append("000001"); + } + return pptCode.toString(); + } + + private WorkPlan findRelevantWorkPlan(Long woId) { + List prWorkPlanItems = workPlanItemService.listByWoId(woId); + WorkPlan prWorkPlan = null; + for (WorkPlanItem item : prWorkPlanItems) { + if ("承压检测".equals(item.getItemName()) || "承压测试".equals(item.getItemName()) || "承压测试检测".equals(item.getItemName())) { + if (item.getCheckResult() == -1) { + prWorkPlan = workPlanService.getById(item.getWpId()); + } + } + } + return prWorkPlan; + } + + private void processTestItems(JSONArray testList, String batchNo, Integer quantity, String woCode, String remark, + String partCode, String partName, String productType, String pptCode, + WorkPlan workPlan, BladeUser user) throws Exception { + for (int i = 0; i < testList.size(); i++) { + JSONObject object = testList.getObject(i, JSONObject.class); + String value = object.getString("value"); + String label = object.getString("label"); + + JSONObject response = httpRequestService.launchTest( + batchNo, quantity, woCode, remark, value, label, i + 1, user, partCode, partName, productType, pptCode + ); + + if (response != null) { + saveTestRecord(workPlan, user, value, label, pptCode, response, i + 1); + } else { + throw new BusinessException("LIMS系统接口调用失败,请联系相关负责人处理。"); + } + } + } + + private void saveTestRecord(WorkPlan workPlan, BladeUser user, String testKey, String testName, + String pptCode, JSONObject response, int sequence) { + PlanTest prPlanTest = new PlanTest(); + prPlanTest.setWpId(workPlan.getId()); + prPlanTest.setTestUserId(user.getUserId()); + prPlanTest.setTestUserName(user.getUserName()); + prPlanTest.setTestTime(LocalDateTime.now()); + prPlanTest.setTestNo((long) sequence); + prPlanTest.setWpCode(testKey); + prPlanTest.setTestName(testName); + prPlanTest.setTestStatus("已送"); + prPlanTest.setCode(pptCode); + prPlanTest.setErpId(response.getString("id")); + prPlanTest.setDataId(response.getString("str1")); + planTestService.save(prPlanTest); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/PlanTestController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/PlanTestController.java index 9ca096ef..c3027b09 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/PlanTestController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/PlanTestController.java @@ -10,6 +10,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Configuration; import jakarta.validation.Valid; @@ -24,6 +25,8 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.desk.basic.util.ExcelExtUtil; +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; +import org.springblade.desk.produce.service.IWorkOrderService; import org.springblade.desk.quality.constant.QAModuleConst; import org.springblade.desk.quality.excel.PlanTestExcel; import org.springblade.desk.quality.pojo.entity.PlanTest; @@ -52,6 +55,8 @@ public class PlanTestController extends BladeController { private final IPlanTestService service; + private IWorkOrderService workOrderService; + /** * [转试记录] 详情 */ @@ -278,4 +283,37 @@ public class PlanTestController extends BladeController { service.testPlanIncomplete(); return R.success(); } + + /** + * [转试记录] 判断是否符合转试条件 + */ + @PostMapping("/isTransferTest") + @ApiOperationSupport(order = 72) + @Operation(summary = "是否符合转试条件", description = "Long woId 订单id") + public R isTransferTest(@RequestParam("woId") Long woId) { + return R.data(workOrderService.isTransferTest(woId)); + } + + @PostMapping("/trialItemList") + @ApiOperationSupport(order = 73) + @Operation(summary = "获取转试的试验计划", description = "无需传参") + public R>> trialItemList() { + return R.data(workOrderService.trialItemList()); + } + + @PostMapping("/launchTest") + @ApiOperationSupport(order = 73) + @Operation(summary = "发起试验计划", description = "无需传参") + public R launchTest(@RequestBody Map data, HttpServletRequest request) throws Exception { + BladeUser user = AuthUtil.getUser(); + workOrderService.launchTest(data, user); + return R.success(); + } + + @PostMapping(value = "/queryAllocationMess") + @ApiOperationSupport(order = 1) + @Operation(summary = "加载配套信息", description = "filterContext 查询参数") + private R> queryAllocationMess(@RequestBody AllocationMessPageDTO allocationMessPageDTO) { + return R.data(workOrderService.queryAllocationMess(allocationMessPageDTO)); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/PlanTestClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/PlanTestClient.java deleted file mode 100644 index 3546f5eb..00000000 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/PlanTestClient.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.springblade.desk.quality.feign; - -import io.swagger.v3.oas.annotations.Hidden; -import jakarta.annotation.Resource; -import org.springblade.desk.quality.pojo.entity.PlanTest; -import org.springblade.desk.quality.service.IPlanTestService; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Date; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:32 - */ -@RestController -@Hidden() -public class PlanTestClient implements IPlanTestClient{ - - @Resource - private IPlanTestService planTestService; - - @Override - public PlanTest getLatestData(Date currentDate) { - return planTestService.getLatestData(currentDate); - } - - @Override - public void save(PlanTest planTest) { - planTestService.save(planTest); - } -} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/WorkPlanItemClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/WorkPlanItemClient.java deleted file mode 100644 index fc7dbb14..00000000 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/WorkPlanItemClient.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.springblade.desk.quality.feign; - -import io.swagger.v3.oas.annotations.Hidden; -import jakarta.annotation.Resource; -import org.springblade.desk.quality.pojo.entity.WorkPlanItem; -import org.springblade.desk.quality.service.IWorkPlanItemService; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - * @author 石玖洲 - * @Description - * @create 2026-04-23 10:16 - */ -@RestController -@Hidden() -public class WorkPlanItemClient implements IWorkPlanItemClient{ - - @Resource - private IWorkPlanItemService workPlanItemService; - - @Override - public List listByWoId(Long woId) { - return workPlanItemService.listByWoId(woId); - } -} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java index 84c99153..b2612926 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java @@ -32,7 +32,6 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.AllArgsConstructor; @@ -42,16 +41,14 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.annotation.IsAdmin; -import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.ObjectUtil; -import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; -import org.springblade.scheduling.scheduling.dto.WorkOrderDto; import org.springblade.scheduling.pojo.entity.WorkOrderEntity; -import org.springblade.scheduling.scheduling.excel.SchedulingBoardExcel; import org.springblade.scheduling.pojo.vo.WorkOrderVO; +import org.springblade.scheduling.scheduling.dto.WorkOrderDto; +import org.springblade.scheduling.scheduling.excel.SchedulingBoardExcel; import org.springblade.scheduling.scheduling.excel.WorkOrderExcel; import org.springblade.scheduling.scheduling.service.IWorkOrderService; import org.springblade.scheduling.scheduling.vo.WorkPlanVO; @@ -333,37 +330,4 @@ public class WorkOrderController extends BladeController { workOrderService.test(); return R.success(); } - - /** - * [转试记录] 判断是否符合转试条件 - */ - @PostMapping("/isTransferTest") - @ApiOperationSupport(order = 72) - @Operation(summary = "是否符合转试条件", description = "Long woId 订单id") - public R isTransferTest(@RequestParam("woId") Long woId) { - return R.data(workOrderService.isTransferTest(woId)); - } - - @PostMapping("/trialItemList") - @ApiOperationSupport(order = 73) - @Operation(summary = "获取转试的试验计划", description = "无需传参") - public R>> trialItemList() { - return R.data(workOrderService.trialItemList()); - } - - @PostMapping("/launchTest") - @ApiOperationSupport(order = 73) - @Operation(summary = "发起试验计划", description = "无需传参") - public R launchTest(@RequestBody Map data, HttpServletRequest request) throws Exception { - BladeUser user = AuthUtil.getUser(); - workOrderService.launchTest(data, user); - return R.success(); - } - - @PostMapping(value = "/queryAllocationMess") - @ApiOperationSupport(order = 1) - @Operation(summary = "加载配套信息", description = "filterContext 查询参数") - private R> queryAllocationMess(@RequestBody AllocationMessPageDTO allocationMessPageDTO) { - return R.data(workOrderService.queryAllocationMess(allocationMessPageDTO)); - } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java index 48cfe17e..7157efc5 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java @@ -120,32 +120,4 @@ public interface IWorkOrderService extends BaseService { IPage selectProcessExecuteDetailPage(IPage page, WorkPlanVO workPlan); void test(); - - /** - * 根据订单id查询 - * @param woId 订单id - * @return 是否符合转试条件 - */ - Boolean isTransferTest(Long woId); - - /** - * 试转项目列表 - * @return 试转项目列表 - */ - List> trialItemList(); - - /** - * 发起试转 - * @param data 试转数据 - * @param user 用户 - * @throws Exception - */ - void launchTest(Map data, BladeUser user) throws Exception; - - /** - * 查询分配信息 - * @param dto 查询条件 - * @return 分配信息 - */ - Map queryAllocationMess(AllocationMessPageDTO dto); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index ea89e594..4df8be2c 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -26,8 +26,6 @@ package org.springblade.scheduling.scheduling.service.impl; import cn.hutool.http.HttpUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -42,29 +40,15 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; -import org.springblade.common.exception.BusinessException; import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.utils.DateUtil; -import org.springblade.desk.basic.feign.IBasicClazzClient; -import org.springblade.desk.basic.pojo.entity.BasicClazz; import org.springblade.desk.dashboard.constant.DsPartConstant; import org.springblade.desk.dashboard.pojo.entity.DsPartVersionEntity; -import org.springblade.desk.energy.feign.IHttpRequestClient; -import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; -import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; -import org.springblade.desk.produce.feign.IWorkPlanClient; -import org.springblade.desk.produce.pojo.entity.WorkPlan; -import org.springblade.desk.quality.feign.IPlanTestClient; -import org.springblade.desk.quality.feign.IWorkPlanItemClient; -import org.springblade.desk.quality.pojo.entity.PlanTest; -import org.springblade.desk.quality.pojo.entity.WorkPlanItem; -import org.springblade.erpdata.feign.IErpDataLogisticsClient; -import org.springblade.erpdata.feign.IErpDataProduceClient; import org.springblade.scheduling.pojo.entity.*; import org.springblade.scheduling.pojo.enums.WorkOrderEnum; import org.springblade.scheduling.pojo.vo.WorkOrderVO; @@ -129,20 +113,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl(mergeMap.values()); } - - @Override - public Boolean isTransferTest(Long woId) { - List prWorkPlanItems = workPlanItemClient.listByWoId(woId); - - // 没有试验项目,不能转试 - if (!(prWorkPlanItems != null && !prWorkPlanItems.isEmpty())) { - return false; - } - - boolean flag = false; - for (WorkPlanItem prWorkPlanItem : prWorkPlanItems) { - // 如果试验项目中包含 承压检测 则代表可以发起转试 24/8/5 牛营杰确认 - if ("承压检测".equals(prWorkPlanItem.getItemName())) { - if (prWorkPlanItem.getCheckResult() == -1) { - flag = true; - } - } - } - return flag; - } - - @Override - public List> trialItemList() { - // 构造 SQL 查询语句 - List basicClazzList = basicClazzClient.list(new LambdaQueryWrapper() - .eq(BasicClazz::getBizType, 11)); - List nameList = basicClazzList.stream().map(BasicClazz::getName).collect(Collectors.toList()); - List> mapList = erpDataProduceClient.trialItemList(nameList).getData(); - // 转换查询结果 - List> result = new ArrayList<>(); - if (mapList != null && !mapList.isEmpty()) { - for (Map map : mapList) { - Map item = new HashMap<>(); - item.put("value", map.get("key") != null ? map.get("key") : ""); - item.put("label", map.get("value") != null ? map.get("value") : ""); - result.add(item); - } - } - return result; - } - - @Override - public Map queryAllocationMess(AllocationMessPageDTO dto) { - List allocationMessList = erpDataLogisticsClient.queryAllocationMess(dto).getData(); - int totalAllocationMessNum = erpDataLogisticsClient.queryAllocationMessNum(dto).getData(); - Map result = new HashMap<>(3); - result.put("current",dto.getPageNum()); - result.put("record",allocationMessList); - result.put("total",totalAllocationMessNum); - return result; - } - - @Override - public void launchTest(Map data, BladeUser user) throws Exception { - // 提取参数 - String batchNo = (String) data.get("batchNo"); - Integer quantity = Integer.parseInt(data.get("quantity").toString()); - String woCode = (String) data.get("woCode"); - String remark = (String) data.get("remark"); - String partCode = (String) data.get("partCode"); - String productType = (String) data.get("productType"); - String partName = (String) data.get("partName"); - Object testListObj = data.get("testList"); - JSONArray testList = (JSONArray) JSON.toJSON(testListObj); - Long woId = Long.parseLong(data.get("woId").toString()); - - // 生成转试单号 - String pptCode = generatePptCode(); - - // 获取相关工序 - WorkPlan workPlan = findRelevantWorkPlan(woId); - - // 处理每个测试项 - processTestItems(testList, batchNo, quantity, woCode, remark, partCode, partName, productType, pptCode, workPlan, user); - } - - private String generatePptCode() { - Calendar c = Calendar.getInstance(); - Date currentDate = new Date(); - c.setTime(currentDate); - String year = String.valueOf(c.get(Calendar.YEAR)); - int month = c.get(Calendar.MONTH) + 1; - String formattedMonth = month < 10 ? "0" + month : String.valueOf(month); - - PlanTest latestData = planTestClient.getLatestData(currentDate); - StringBuilder pptCode = new StringBuilder("LCR" + year + "-" + formattedMonth); - - if (latestData != null && latestData.getId() != null) { - if (org.apache.commons.lang3.StringUtils.isNotBlank(latestData.getCode())) { - String numStr = String.valueOf(Integer.parseInt(latestData.getCode().substring(10)) + 1); - pptCode.append("0".repeat(Math.max(0, 6 - numStr.length()))); - pptCode.append(numStr); - } - } else { - pptCode.append("000001"); - } - return pptCode.toString(); - } - - private WorkPlan findRelevantWorkPlan(Long woId) { - List prWorkPlanItems = workPlanItemClient.listByWoId(woId); - WorkPlan prWorkPlan = null; - for (WorkPlanItem item : prWorkPlanItems) { - if ("承压检测".equals(item.getItemName()) || "承压测试".equals(item.getItemName()) || "承压测试检测".equals(item.getItemName())) { - if (item.getCheckResult() == -1) { - prWorkPlan = workPlanClient.selectById(item.getWpId()); - } - } - } - return prWorkPlan; - } - - private void processTestItems(JSONArray testList, String batchNo, Integer quantity, String woCode, String remark, - String partCode, String partName, String productType, String pptCode, - WorkPlan workPlan, BladeUser user) throws Exception { - for (int i = 0; i < testList.size(); i++) { - JSONObject object = testList.getObject(i, JSONObject.class); - String value = object.getString("value"); - String label = object.getString("label"); - - JSONObject response = httpRequestClient.launchTest( - batchNo, quantity, woCode, remark, value, label, i + 1, user, partCode, partName, productType, pptCode - ); - - if (response != null) { - saveTestRecord(workPlan, user, value, label, pptCode, response, i + 1); - } else { - throw new BusinessException("LIMS系统接口调用失败,请联系相关负责人处理。"); - } - } - } - - private void saveTestRecord(WorkPlan workPlan, BladeUser user, String testKey, String testName, - String pptCode, JSONObject response, int sequence) { - PlanTest prPlanTest = new PlanTest(); - prPlanTest.setWpId(workPlan.getId()); - prPlanTest.setTestUserId(user.getUserId()); - prPlanTest.setTestUserName(user.getUserName()); - prPlanTest.setTestTime(LocalDateTime.now()); - prPlanTest.setTestNo((long) sequence); - prPlanTest.setWpCode(testKey); - prPlanTest.setTestName(testName); - prPlanTest.setTestStatus("已送"); - prPlanTest.setCode(pptCode); - prPlanTest.setErpId(response.getString("id")); - prPlanTest.setDataId(response.getString("str1")); - planTestClient.save(prPlanTest); - } }