修改接口

liweidong
ShiJiuZhou 4 days ago
parent c1ffbc79bc
commit 0caf78959f
  1. 32
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IBasicClazzClient.java
  2. 42
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/energy/feign/IHttpRequestClient.java
  3. 29
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IWorkPlanClient.java
  4. 41
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/IPlanTestClient.java
  5. 31
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/IWorkPlanItemClient.java
  6. 28
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/BasicClazzClient.java
  7. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/feign/HttpRequestClient.java
  8. 25
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/WorkPlanClient.java
  9. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  10. 169
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  11. 38
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/PlanTestController.java
  12. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/PlanTestClient.java
  13. 27
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/WorkPlanItemClient.java
  14. 40
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java
  15. 28
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java
  16. 179
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java

@ -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<BasicClazz> list(LambdaQueryWrapper<BasicClazz> lambdaQueryWrapper);
}

@ -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;
}

@ -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);
}

@ -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);
}

@ -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<WorkPlanItem> listByWoId(Long woId);
}

@ -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<BasicClazz> list(LambdaQueryWrapper<BasicClazz> lambdaQueryWrapper) {
return basicClazzService.list(lambdaQueryWrapper);
}
}

@ -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);
}
}

@ -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);
}
}

@ -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<WorkOrder> {
List<WorkOrder> findCubByYoId(Long yoId);
void saveAdjust(Long woId, Long oldTsId, Long newTsId, Long userId);
/**
* 根据订单id查询
* @param woId 订单id
* @return 是否符合转试条件
*/
Boolean isTransferTest(Long woId);
/**
* 试转项目列表
* @return 试转项目列表
*/
List<Map<String,String>> trialItemList();
/**
* 发起试转
* @param data 试转数据
* @param user 用户
* @throws Exception
*/
void launchTest(Map<String,Object> data, BladeUser user) throws Exception;
/**
* 查询分配信息
* @param dto 查询条件
* @return 分配信息
*/
Map<String,Object> queryAllocationMess(AllocationMessPageDTO dto);
}

@ -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<WorkOrderMapper, WorkO
private final IWorkPlanItemDetailService workPlanItemDetailService;
@Resource
private final InspectionTaskMapper inspectionTaskMapper;
private final IWorkOrderRunService workOrderRunService;
@ -114,6 +124,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final IWorkPlanRunService workPlanRunService;
@Resource
private final PlateAroundMapper plateAroundMapper;
private final IProcessAbilityService processAbilityService;
@ -123,6 +134,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final IDsPartService dsPartService;
@Resource
private final YieldOrderMapper yieldOrderMapper;
private final IEquipmentService equipmentService;
@ -162,6 +174,14 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final IWorkOrderAdjustService workOrderAdjustService;
private final IBasicClazzService basicClazzService;
@Resource
private final HttpRequestService httpRequestService;
@Resource
private final IErpDataLogisticsClient erpDataLogisticsClient;
@Override
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) {
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder));
@ -2602,4 +2622,153 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
nf.setGroupingUsed(useGrouping);
return nf.format(n);
}
@Override
public Boolean isTransferTest(Long woId) {
List<WorkPlanItem> 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<Map<String, String>> trialItemList() {
// 构造 SQL 查询语句
List<BasicClazz> basicClazzList = basicClazzService.list(new LambdaQueryWrapper<BasicClazz>()
.eq(BasicClazz::getBizType, 11));
List<String> nameList = basicClazzList.stream().map(BasicClazz::getName).collect(Collectors.toList());
List<Map<String, String>> mapList = erpDataProduceClient.trialItemList(nameList).getData();
// 转换查询结果
List<Map<String, String>> result = new ArrayList<>();
if (mapList != null && !mapList.isEmpty()) {
for (Map<String,String> map : mapList) {
Map<String, String> 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<String,Object> queryAllocationMess(AllocationMessPageDTO dto) {
List<AllocationMessVO> allocationMessList = erpDataLogisticsClient.queryAllocationMess(dto).getData();
int totalAllocationMessNum = erpDataLogisticsClient.queryAllocationMessNum(dto).getData();
Map<String,Object> result = new HashMap<>(3);
result.put("current",dto.getPageNum());
result.put("record",allocationMessList);
result.put("total",totalAllocationMessNum);
return result;
}
@Override
public void launchTest(Map<String, Object> 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<WorkPlanItem> 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);
}
}

@ -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<Boolean> isTransferTest(@RequestParam("woId") Long woId) {
return R.data(workOrderService.isTransferTest(woId));
}
@PostMapping("/trialItemList")
@ApiOperationSupport(order = 73)
@Operation(summary = "获取转试的试验计划", description = "无需传参")
public R<List<Map<String,String>>> trialItemList() {
return R.data(workOrderService.trialItemList());
}
@PostMapping("/launchTest")
@ApiOperationSupport(order = 73)
@Operation(summary = "发起试验计划", description = "无需传参")
public R launchTest(@RequestBody Map<String,Object> 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<Map<String,Object>> queryAllocationMess(@RequestBody AllocationMessPageDTO allocationMessPageDTO) {
return R.data(workOrderService.queryAllocationMess(allocationMessPageDTO));
}
}

@ -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);
}
}

@ -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<WorkPlanItem> listByWoId(Long woId) {
return workPlanItemService.listByWoId(woId);
}
}

@ -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<Boolean> isTransferTest(@RequestParam("woId") Long woId) {
return R.data(workOrderService.isTransferTest(woId));
}
@PostMapping("/trialItemList")
@ApiOperationSupport(order = 73)
@Operation(summary = "获取转试的试验计划", description = "无需传参")
public R<List<Map<String,String>>> trialItemList() {
return R.data(workOrderService.trialItemList());
}
@PostMapping("/launchTest")
@ApiOperationSupport(order = 73)
@Operation(summary = "发起试验计划", description = "无需传参")
public R launchTest(@RequestBody Map<String,Object> 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<Map<String,Object>> queryAllocationMess(@RequestBody AllocationMessPageDTO allocationMessPageDTO) {
return R.data(workOrderService.queryAllocationMess(allocationMessPageDTO));
}
}

@ -120,32 +120,4 @@ public interface IWorkOrderService extends BaseService<WorkOrderEntity> {
IPage<WorkPlanVO> selectProcessExecuteDetailPage(IPage<WorkPlanVO> page, WorkPlanVO workPlan);
void test();
/**
* 根据订单id查询
* @param woId 订单id
* @return 是否符合转试条件
*/
Boolean isTransferTest(Long woId);
/**
* 试转项目列表
* @return 试转项目列表
*/
List<Map<String,String>> trialItemList();
/**
* 发起试转
* @param data 试转数据
* @param user 用户
* @throws Exception
*/
void launchTest(Map<String,Object> data, BladeUser user) throws Exception;
/**
* 查询分配信息
* @param dto 查询条件
* @return 分配信息
*/
Map<String,Object> queryAllocationMess(AllocationMessPageDTO dto);
}

@ -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<WorkOrderMapper, WorkO
private final IPartRelationService partRelationService;
@Resource
private final StGlassCakeOutClient glassCakeOutClient;
@Resource
private final IWorkPlanItemClient workPlanItemClient;
@Resource
private final IBasicClazzClient basicClazzClient;
@Resource
private final IErpDataProduceClient erpDataProduceClient;
@Resource
private final IPlanTestClient planTestClient;
@Resource
private final IWorkPlanClient workPlanClient;
@Resource
private final IHttpRequestClient httpRequestClient;
@Resource
private IErpDataLogisticsClient erpDataLogisticsClient;
@Value("${business.oldMes.url}")
private String oldMesUrl;
@ -2422,153 +2392,4 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
// 将Map的值转换为List返回
return new ArrayList<>(mergeMap.values());
}
@Override
public Boolean isTransferTest(Long woId) {
List<WorkPlanItem> 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<Map<String, String>> trialItemList() {
// 构造 SQL 查询语句
List<BasicClazz> basicClazzList = basicClazzClient.list(new LambdaQueryWrapper<BasicClazz>()
.eq(BasicClazz::getBizType, 11));
List<String> nameList = basicClazzList.stream().map(BasicClazz::getName).collect(Collectors.toList());
List<Map<String, String>> mapList = erpDataProduceClient.trialItemList(nameList).getData();
// 转换查询结果
List<Map<String, String>> result = new ArrayList<>();
if (mapList != null && !mapList.isEmpty()) {
for (Map<String,String> map : mapList) {
Map<String, String> 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<String,Object> queryAllocationMess(AllocationMessPageDTO dto) {
List<AllocationMessVO> allocationMessList = erpDataLogisticsClient.queryAllocationMess(dto).getData();
int totalAllocationMessNum = erpDataLogisticsClient.queryAllocationMessNum(dto).getData();
Map<String,Object> result = new HashMap<>(3);
result.put("current",dto.getPageNum());
result.put("record",allocationMessList);
result.put("total",totalAllocationMessNum);
return result;
}
@Override
public void launchTest(Map<String, Object> 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<WorkPlanItem> 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);
}
}

Loading…
Cancel
Save