Merge remote-tracking branch 'origin/master'

liweidong
maxiangong 1 day ago
commit 95eadb8786
  1. 4
      blade-ops/blade-develop/pom.xml
  2. 1
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java
  3. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ByCardNoByPlanVO.java
  4. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BasicClazzController.java
  5. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BsAssignController.java
  6. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/CraftAbilityController.java
  7. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/LocallyPlatedPartController.java
  8. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/TeamSetController.java
  9. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkCenterController.java
  10. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/AssignMapper.xml
  11. 77
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/util/HttpRequestService.java
  12. 37
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PrWorkOrderController.java
  13. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkOrderService.java
  14. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkPlanService.java
  15. 27
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkOrderServiceImpl.java
  16. 176
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkPlanServiceImpl.java
  17. 39
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java
  18. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java
  19. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  20. 190
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java
  21. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java
  22. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/ProcessQualityMaintenanceServiceImpl.java
  23. 169
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  24. 34
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java
  25. 38
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/PlanTestController.java
  26. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/PlanTestServiceImpl.java
  27. 6
      blade-service/blade-scheduling/pom.xml
  28. 5
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java
  29. 6
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java
  30. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java

@ -41,10 +41,6 @@
<groupId>org.springblade</groupId>
<artifactId>blade-dict-api</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-develop-api</artifactId>
</dependency>
</dependencies>
<build>

@ -31,7 +31,6 @@ import java.util.Map;
@EqualsAndHashCode(callSuper = true)
public class WorkPlan extends BaseEntity {
/**
* TODO 工序状态要调整到常量类中
* 工序状态未开始
*/
public static Integer STATUS_NO_START = 1;

@ -32,7 +32,7 @@ public class ByCardNoByPlanVO {
private String batchNo;
@Schema(description = "工序ID")
private Long ppsId;
private String ppsId;
@Schema(description = "当前工序")
private String ppsName;
@ -41,7 +41,7 @@ public class ByCardNoByPlanVO {
private Double workQty;
@Schema(description = "班组id")
private Long tsId;
private String tsId;
@Schema(description = "班组名称")
private String tsName;

@ -47,6 +47,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -91,6 +92,11 @@ public class BasicClazzController extends BladeController {
@Operation(summary = "list分页", description = "传入BasicClazz Obj")
public R<IPage<BasicClazzVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> basicClazz,
Query query) {
basicClazz = basicClazz
.entrySet()
.stream()
.filter(entry -> Objects.nonNull(entry.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
QueryWrapper<BasicClazz> qw = Condition.getQueryWrapper(basicClazz, BasicClazz.class);
IPage<BasicClazz> pages = service.page(Condition.getPage(query), qw);
IPage<BasicClazzVO> pagesVO = BasicClazzWrapper.build().pageVO(pages);

@ -123,6 +123,9 @@ public class BsAssignController extends BladeController {
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入bsAssign")
public R<IPage<BsAssignVO>> page(BsAssignVO bsAssign, Query query) {
query.setDescs(null);
query.setAscs(null);
IPage<BsAssignVO> pages = bsAssignService.selectBsAssignPage(Condition.getPage(query), bsAssign);
List<BsAssignVO> list = pages.getRecords();
for(BsAssignVO vo:list){

@ -121,8 +121,10 @@ public class CraftAbilityController extends BladeController {
@ApiOperationSupport(order = 2)
@Operation(summary = "分页", description = "传入CraftAbility")
public R<IPage<CraftAbilityVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> craftAbility, Query query) {
craftAbility.remove("descs");
craftAbility.remove("ascs");
query.setDescs(null);
query.setAscs(null);
Date startTime = null;
Date endTime = null;
@ -143,7 +145,7 @@ public class CraftAbilityController extends BladeController {
if(null != startTime && null != endTime){
qw.between("UPDATE_TIME", startTime,endTime);
}
qw.orderByAsc("CA_CODE");
qw.last("ORDER BY UPDATE_TIME DESC ");
IPage<CraftAbilityEntity> pages = craftAbilityService.page(Condition.getPage(query), qw);
IPage<CraftAbilityVO> pagesVO = CraftAbilityWrapper.build().pageVO(pages);
pagesVO.getRecords()

@ -84,7 +84,12 @@ public class LocallyPlatedPartController extends BladeController {
@Operation(summary = "list分页", description = "传入LocallyPlatedPart Obj")
public R<IPage<LocallyPlatedPartVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> locallyPlatedPart,
Query query) {
locallyPlatedPart.remove("descs");
locallyPlatedPart.remove("ascs");
query.setDescs(null);
query.setAscs(null);
QueryWrapper<LocallyPlatedPart> qw = Condition.getQueryWrapper(locallyPlatedPart, LocallyPlatedPart.class);
qw.last("ORDER BY UPDATE_TIME DESC ");
IPage<LocallyPlatedPart> pages = service.page(Condition.getPage(query), qw);
IPage<LocallyPlatedPartVO> pagesVO = LocallyPlatedPartWrapper.build().pageVO(pages);
pagesVO.getRecords()

@ -247,8 +247,10 @@ public class TeamSetController extends BladeController {
@Operation(summary = "list分页", description = "传入TeamSet Obj")
public R<IPage<TeamSetVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> map,
Query query) {
map.remove("descs");
map.remove("ascs");
query.setDescs(null);
query.setAscs(null);
// List<Long> ids = new ArrayList<>();
// if(map.containsKey("dispatcherRealName")){
// List<User> users = iUserClient.userListByName(Func.toStr(map.get("dispatcherRealName")));
@ -269,7 +271,7 @@ public class TeamSetController extends BladeController {
qw.eq(map.containsKey(TeamSet.COL_DISPATCHER), TeamSet.COL_DISPATCHER, (Func.toLong(map.get(TeamSet.COL_DISPATCHER))));
qw.in(map.containsKey("ids"), "ID", Func.toLong(map.get("ids")));
qw.last("ORDER BY UPDATE_TIME DESC ");
// page
IPage<TeamSet> pages = service.page(Condition.getPage(query), qw);

@ -93,6 +93,11 @@ public class WorkCenterController extends BladeController {
@Operation(summary = "list分页", description = "传入WorkCenter Obj")
public R<IPage<WorkCenterVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> workCenter,
Query query) {
query.setDescs(null);
query.setAscs(null);
workCenter.remove("descs");
workCenter.remove("ascs");
QueryWrapper<WorkCenter> qw = Condition.getQueryWrapper(workCenter, WorkCenter.class);
qw.like(workCenter.containsKey("wcCode"), WorkCenter.COL_WC_CODE, Func.toStr(workCenter.get("wcCode")));
@ -103,6 +108,7 @@ public class WorkCenterController extends BladeController {
qw.like(workCenter.containsKey("team"), WorkCenter.COL_TEAM, Func.toStr(workCenter.get("team")));
qw.like(workCenter.containsKey("teamId"), WorkCenter.COL_TEAM_ID, Func.toStr(workCenter.get("teamId")));
qw.last("ORDER BY UPDATE_TIME DESC ");
IPage<WorkCenter> pages = service.page(Condition.getPage(query), qw);
IPage<WorkCenterVO> pagesVO = WorkCenterWrapper.build().pageVO(pages);
List<WorkCenterVO> vos = pagesVO.getRecords();

@ -57,6 +57,7 @@
AND center_id = #{bsAssign.centerId}
</if>
ORDER BY UPDATE_TIME DESC
</select>

@ -1,5 +1,6 @@
package org.springblade.desk.energy.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
@ -7,10 +8,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.core.secure.BladeUser;
import org.springframework.beans.factory.annotation.Value;
import org.springblade.desk.energy.pojo.entity.BsTowerEntity;
import org.springblade.desk.energy.pojo.entity.RpParameterSet;
import org.springblade.desk.energy.service.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@ -18,9 +16,13 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author 石玖洲
*/
@Service
@RequiredArgsConstructor
public class HttpRequestService {
@ -42,6 +44,15 @@ public class HttpRequestService {
@Value("${request.lims.url}")
private String limsUrl;
@Value("${request.iot.orgId}")
private String orgId;
@Value("${request.iot.systemId}")
private String systemId;
@Value("${request.equ.url}")
private String equUrl;
/**
* <p>Description: 获取看板废水废气酸雾塔实时数据新接口 </p>
*
@ -170,4 +181,64 @@ public class HttpRequestService {
}
return null;
}
/**
* <p>Description: 获取产线每日实际用水用电量历史数据 </p>
*
* @param deviceId 设备id
* @param params
* @param startTime 开始时间
* @param endTime 结束时间
* @Author qjh
* @Date: 2023/1/6 10:10
*/
public List<JSONObject> getEneUsed(String deviceId, ArrayList<String> params, String startTime, String endTime) {
// 头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
JSONObject object = new JSONObject();
object.put("orgId", orgId);
object.put("systemId", systemId);
object.put("params", params); // 设备对应的参数信息
object.put("deviceId", deviceId); // 设备编码
object.put("startTime", startTime); // 开始时间(入炉)
object.put("endTime", endTime); // 结束时间(出炉)
HttpEntity<JSONObject> entity = new HttpEntity<>(object, headers);
ResponseEntity<JSONObject> responseEntity = null;
try {
responseEntity = httpClientTemplate.postForEntity(iotNewUrl + "/deviceForZhgd/deviceDataHistoryByParams", entity, JSONObject.class);
JSONObject result = responseEntity.getBody();
if (result != null && result.getInteger("code").equals(0)) {
List<JSONObject> jsonList = JSONArray.parseArray(result.getJSONArray("result").toJSONString(), JSONObject.class);
if (jsonList != null && !jsonList.isEmpty()) {
return jsonList;
}
} else {
log.error("获取用水用电量、烧结解绑获取数据接口调用失败!" + result.getString("message") + "设备编码" + deviceId + "参数" + object);
}
} catch (Exception e) {
log.error("获取用水用电量、烧结解绑获取数据接口调用失败!" + e.getMessage() + "设备编码" + deviceId + "参数" + object);
}
return null;
}
public JSONObject getParams(String deviceCode) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("appId", "1358950685609828353");
JSONObject json = new JSONObject();
json.put("deviceCode", deviceCode); // 设备编码
HttpEntity<JSONObject> entity = new HttpEntity<>(json, headers);
ResponseEntity<JSONObject> responseEntity = httpClientTemplate.postForEntity(equUrl + "/api/device/device/prodLineInfo", entity, JSONObject.class);
JSONObject object = responseEntity.getBody();
if (object.getInteger("code").equals(0)) {
JSONObject data = object.getJSONObject("data");
if (data != null) {
return data;
}
} else {
log.error("获取设备对应的参数数据接口调用失败!" + "设备编码" + deviceCode);
}
return null;
}
}

@ -1,37 +0,0 @@
package org.springblade.desk.logistics.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springblade.core.tool.api.R;
import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO;
import org.springblade.desk.logistics.service.IPrWorkOrderService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* @author 石玖洲
* @Description
* @create 2026-04-22 15:00
*/
@RestController
@AllArgsConstructor
@RequestMapping("/prWorkOrder")
@Tag(name = "车间订单->视图", description = "车间订单->视图")
public class PrWorkOrderController {
@Resource
private IPrWorkOrderService prWorkOrderService;
@PostMapping(value = "/queryAllocationMess")
@ApiOperationSupport(order = 1)
@Operation(summary = "加载配套信息", description = "filterContext 查询参数")
private R<Map<String,Object>> queryAllocationMess(@RequestBody AllocationMessPageDTO allocationMessPageDTO) {
return R.data(prWorkOrderService.queryAllocationMess(allocationMessPageDTO));
}
}

@ -26,15 +26,7 @@
package org.springblade.desk.logistics.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO;
import org.springblade.desk.logistics.pojo.entity.PrWorkOrder;
import org.springblade.desk.logistics.pojo.entity.WeighData;
import org.springblade.desk.logistics.pojo.vo.AllocationMessVO;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 车间订单 服务类
@ -43,11 +35,4 @@ import java.util.Map;
* @since 2025-11-12
*/
public interface IPrWorkOrderService extends IService<PrWorkOrder> {
/**
* 查询分配信息
* @param dto 查询条件
* @return 分配信息
*/
Map<String,Object> queryAllocationMess(AllocationMessPageDTO dto);
}

@ -26,14 +26,8 @@
package org.springblade.desk.logistics.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.mp.base.BaseService;
import org.springblade.core.secure.BladeUser;
import org.springblade.desk.logistics.pojo.entity.PrWorkOrder;
import org.springblade.desk.logistics.pojo.entity.PrWorkPlan;
import java.util.List;
import java.util.Map;
/**
* 车间订单序号 服务类
*
@ -41,24 +35,4 @@ import java.util.Map;
* @since 2025-11-12
*/
public interface IPrWorkPlanService extends IService<PrWorkPlan> {
/**
* 根据订单id查询
* @param woId 订单id
* @return 是否符合转试条件
*/
Boolean isTransferTest(Long woId);
/**
* 试转项目列表
* @return 试转项目列表
*/
List<Map<String,String>> trialItemList();
/**
* 发起试转
* @param data 试转数据
* @param user 用户
*/
void launchTest(Map<String,Object> data, BladeUser user) throws Exception;
}

@ -26,26 +26,13 @@
package org.springblade.desk.logistics.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.logistics.mapper.PrWorkOrderMapper;
import org.springblade.desk.logistics.mapper.WeighDataMapper;
import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO;
import org.springblade.desk.logistics.pojo.entity.PrWorkOrder;
import org.springblade.desk.logistics.pojo.entity.WeighData;
import org.springblade.desk.logistics.pojo.vo.AllocationMessVO;
import org.springblade.desk.logistics.service.IPrWorkOrderService;
import org.springblade.desk.logistics.service.IWeighDataService;
import org.springblade.erpdata.feign.IErpDataLogisticsClient;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 车间订单 服务实现类
*
@ -56,18 +43,4 @@ import java.util.Map;
@Slf4j
@AllArgsConstructor
public class PrWorkOrderServiceImpl extends ServiceImpl<PrWorkOrderMapper, PrWorkOrder> implements IPrWorkOrderService {
@Resource
private IErpDataLogisticsClient erpDataLogisticsClient;
@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;
}
}

@ -1,35 +1,13 @@
package org.springblade.desk.logistics.service.impl;
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.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.exception.BusinessException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser;
import org.springblade.desk.basic.mapper.BasicClazzMapper;
import org.springblade.desk.basic.pojo.entity.BasicClazz;
import org.springblade.desk.energy.util.HttpRequestService;
import org.springblade.desk.logistics.mapper.PrWorkPlanMapper;
import org.springblade.desk.logistics.pojo.entity.PrWorkPlan;
import org.springblade.desk.logistics.service.IPrWorkPlanService;
import org.springblade.desk.quality.pojo.entity.PlanTest;
import org.springblade.desk.quality.pojo.entity.WorkPlanItem;
import org.springblade.desk.quality.service.IPlanTestService;
import org.springblade.desk.quality.service.IWorkPlanItemService;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* 车间订单 服务实现类
*
@ -40,158 +18,4 @@ import java.util.stream.Collectors;
@Slf4j
@AllArgsConstructor
public class PrWorkPlanServiceImpl extends ServiceImpl<PrWorkPlanMapper, PrWorkPlan> implements IPrWorkPlanService {
private final IWorkPlanItemService prWorkPlanItemService;
@Resource
private final BasicClazzMapper basicClazzMapper;
@Resource
private final IErpDataProduceClient erpDataProduceClient;
private final IPlanTestService planTestService;
@Resource
private final PrWorkPlanMapper prWorkplanMapper;
private final HttpRequestService httpRequestService;
@Override
public Boolean isTransferTest(Long woId) {
List<WorkPlanItem> prWorkPlanItems = prWorkPlanItemService.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 = basicClazzMapper.selectList(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 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();
// 获取相关工序
PrWorkPlan prWorkPlan = findRelevantWorkPlan(woId);
// 处理每个测试项
processTestItems(testList, batchNo, quantity, woCode, remark, partCode, partName, productType, pptCode, prWorkPlan, 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 (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 PrWorkPlan findRelevantWorkPlan(Long woId) {
List<WorkPlanItem> prWorkPlanItems = prWorkPlanItemService.listByWoId(woId);
PrWorkPlan prWorkPlan = null;
for (WorkPlanItem item : prWorkPlanItems) {
if ("承压检测".equals(item.getItemName()) || "承压测试".equals(item.getItemName()) || "承压测试检测".equals(item.getItemName())) {
if (item.getCheckResult() == -1) {
prWorkPlan = prWorkplanMapper.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,
PrWorkPlan prWorkPlan, 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(prWorkPlan, user, value, label, pptCode, response, i + 1);
} else {
throw new BusinessException("LIMS系统接口调用失败,请联系相关负责人处理。");
}
}
}
private void saveTestRecord(PrWorkPlan prWorkPlan, BladeUser user, String testKey, String testName,
String pptCode, JSONObject response, int sequence) {
PlanTest prPlanTest = new PlanTest();
prPlanTest.setWpId(prWorkPlan.getPpsId());
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);
}
}

@ -4,21 +4,16 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
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.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.desk.logistics.service.IPrWorkPlanService;
import org.springblade.desk.produce.pojo.vo.WorkPlanVO;
import org.springblade.desk.produce.service.IWorkPlanService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 车间作业计划 控制器
@ -34,8 +29,6 @@ public class PrWorkPlanController extends BladeController {
private final IWorkPlanService workPlanService;
private final IPrWorkPlanService prWorkPlanService;
/**
* 车间作业计划
*/
@ -46,30 +39,4 @@ public class PrWorkPlanController extends BladeController {
IPage<WorkPlanVO> pages = workPlanService.queryWorkPlan(Condition.getPage(query), cardNo);
return R.data(pages);
}
/**
* [转试记录] 判断是否符合转试条件
*/
@PostMapping("/isTransferTest")
@ApiOperationSupport(order = 72)
@Operation(summary = "是否符合转试条件", description = "Long woId 订单id")
public R<Boolean> isTransferTest(@RequestParam("woId") Long woId) {
return R.data(prWorkPlanService.isTransferTest(woId));
}
@PostMapping("/trialItemList")
@ApiOperationSupport(order = 73)
@Operation(summary = "获取转试的试验计划", description = "无需传参")
public R<List<Map<String,String>>> trialItemList() {
return R.data(prWorkPlanService.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();
prWorkPlanService.launchTest(data, user);
return R.success();
}
}

@ -75,4 +75,9 @@ public interface IMacToolUseService extends BaseService<MacToolUse> {
MacToolUse queryByCode(String mtnCode);
GoodsVO getMaterialMess(String goodsCode);
/**
* 获取设备所需参数
*/
void setSjDataCapture(MesQcProduceRunEntity qcProduceRun, Boolean aTrue);
}

@ -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,10 +1,14 @@
package org.springblade.desk.produce.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
@ -14,6 +18,7 @@ import org.springblade.desk.device.pojo.entity.EquipmentEntity;
import org.springblade.desk.device.pojo.entity.RackSetEntity;
import org.springblade.desk.device.service.IEquipmentService;
import org.springblade.desk.device.service.IRackSetService;
import org.springblade.desk.energy.util.HttpRequestService;
import org.springblade.desk.produce.mapper.MacToolUseMapper;
import org.springblade.desk.produce.pojo.dto.MesMacToolUseDTO;
import org.springblade.desk.produce.pojo.entity.MacToolUse;
@ -25,9 +30,11 @@ import org.springblade.desk.produce.pojo.vo.MacToolUseVO;
import org.springblade.desk.produce.pojo.vo.MesMacToolUseVO;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO;
import org.springblade.desk.produce.service.IMacToolUseService;
import org.springblade.desk.produce.service.IMesQcProduceRunService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -50,6 +57,15 @@ public class MacToolUseServiceImpl extends BaseServiceImpl<MacToolUseMapper, Mac
private final IEquipmentService equipmentService;
private final IMesQcProduceRunService mesQcProduceRunService;
@Resource
private HttpRequestService httpRequestService;
String heat1 = "实际温度1", sjzkd = "实际真空度", ld = "露点", ls = "链速", heat2 = "实际温度2", heat3 = "实际温度3", heat4 = "实际温度4", heat5 = "实际温度5", heat6 = "实际温度6", heat7 = "实际温度7", heat8 = "实际温度8",
heat9 = "实际温度9", heat10 = "实际温度10", heat11 = "实际温度11", sdwd01 = "设定温度1", sdwd02 = "设定温度2", sdwd03 = "设定温度3", sdwd04 = "设定温度4", sdwd05 = "设定温度5", sdwd06 = "设定温度6", sdwd07 = "设定温度7", sdwd08 = "设定温度8", sdwd09 = "设定温度9";
@Override
public String nextCode(int i) {
// 编码模式
@ -214,6 +230,180 @@ public class MacToolUseServiceImpl extends BaseServiceImpl<MacToolUseMapper, Mac
return baseMapper.getMaterialMess(goodsCode);
}
@Override
public void setSjDataCapture(MesQcProduceRunEntity produceRun, Boolean unBind) {
MesQcProduceRunEntity qcProduceRun = mesQcProduceRunService.getById(produceRun.getId());
List<JSONObject> eneUsed;
ArrayList<String> params = Lists.newArrayList(); // 参数
String prodLineLevel = null; // 温度上下浮动值
List<JSONObject> jsonList = null; // 根据参数获取到的设备参数信息
Double heat = 0d; // 最高温度
if (qcProduceRun.getTempSlot() != null && Double.parseDouble(qcProduceRun.getTempSlot()) > 0) {
heat = Double.valueOf(qcProduceRun.getTempSlot());
}
Double vacuity = 1000000d; // 真空度
if (qcProduceRun.getDataFourteen() != null && Double.parseDouble(qcProduceRun.getDataFourteen()) < vacuity) {
vacuity = Double.valueOf(qcProduceRun.getDataFourteen());
}
Double setHeat = 20000d; // 设定温度
List<JSONObject> aaaList = new ArrayList<>(); // 温度大于200 得集合
// 获取设备所需参数
JSONObject deviceParams = this.getDeviceParams(qcProduceRun);
if (deviceParams != null) {
prodLineLevel = deviceParams.getString("prodLineLevel");
if (org.apache.commons.lang3.StringUtils.isBlank(prodLineLevel)) {
prodLineLevel = "0";
}
jsonList = JSONArray.parseArray(deviceParams.getJSONArray("prodLineMeasurePoint").toJSONString(), JSONObject.class);
if (jsonList != null && jsonList.size() > 0) {
// 处理参数
for (JSONObject jsonObject : jsonList) {
params.add(jsonObject.getString("attrCode"));
}
String startTime = qcProduceRun.getInDate();
// 获取当前时间字符串格式
String endTime = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
if (unBind) {
endTime = qcProduceRun.getOutDate();
}
// 获取数据
eneUsed = httpRequestService.getEneUsed(qcProduceRun.getDeviceId(), params, startTime, endTime);
// 处理数据
if (eneUsed != null && !eneUsed.isEmpty()) {
// 只有一个温度并且等于实际温度1
Map<String, JSONObject> eUMap = jsonList.stream().map(cbsSupplier -> new AbstractMap.SimpleEntry<>(cbsSupplier.getString("attrName"), cbsSupplier))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
// 获取设定温度
if (eUMap.get(sdwd01) != null && eneUsed.get(0).getString(eUMap.get(sdwd01).getString("attrCode")) != null) {
setHeat = Double.valueOf(eneUsed.get(0).getString(eUMap.get(sdwd01).getString("attrCode")));
} else if (qcProduceRun.getDataTwo() != null) {
setHeat = Double.valueOf(qcProduceRun.getDataTwo());
}
if (eUMap.get(heat2) != null) { // 如果实际温度2存在代表分区
for (JSONObject jsonObject : eneUsed) {
if (jsonObject.getString(eUMap.get(heat2).getString("attrCode")) == null) return;
// 获取最高温度
heat = this.setMaxHeat(eUMap, jsonObject, heat);
}
qcProduceRun.setTempSlot(String.valueOf(heat));
} else { // 如果实际温度2不存在代表不是分区
for (JSONObject jsonObject : eneUsed) {
if (jsonObject.getString(eUMap.get(heat1).getString("attrCode")) == null) return;
if (org.apache.commons.lang3.StringUtils.isBlank(jsonObject.getString(eUMap.get(heat1).getString("attrCode"))))
continue;
Double value = Double.valueOf(jsonObject.getString(eUMap.get(heat1).getString("attrCode")));
// 获取最高温度
if (value > heat) {
heat = value;
}
// 存储温度大于200 的数据 用与获取真空度
if (value > 200) {
aaaList.add(jsonObject);
}
// 存储保温开始时间
if (org.apache.commons.lang3.StringUtils.isBlank(qcProduceRun.getDataThirteen())) {
if (value >= setHeat) {
qcProduceRun.setDataThirteen(String.valueOf(jsonObject.getString("timestamp")));
}
} else if (value < setHeat && org.apache.commons.lang3.StringUtils.isNotBlank(qcProduceRun.getDataThirteen()) && org.apache.commons.lang3.StringUtils.isBlank(qcProduceRun.getDataTwelve())) {
// 存储保温结束时间
qcProduceRun.setDataTwelve(String.valueOf(jsonObject.getString("timestamp")));
}
}
if (aaaList.size() > 0 && eUMap.get(sjzkd) != null) {
for (JSONObject jsonObject : aaaList) {
if (Double.valueOf(jsonObject.getString(eUMap.get(sjzkd).getString("attrCode"))) < vacuity) {
vacuity = Double.valueOf(jsonObject.getString(eUMap.get(sjzkd).getString("attrCode")));
}
}
// 真空度
qcProduceRun.setDataFourteen(new DecimalFormat("#.000000").format(vacuity));
}
qcProduceRun.setTempSlot(String.valueOf(heat));
}
// 获取链速
if (eUMap.get(ls) != null) {
if (eneUsed.get(0).getString(eUMap.get(ls).getString("attrCode")) != null) {
String string = eneUsed.get(0).getString(eUMap.get(ls).getString("attrCode"));
qcProduceRun.setVSpeed(string);
}
}
// 获取露点
if (eUMap.get(ld) != null) {
if (eneUsed.get(0).getString(eUMap.get(ld).getString("attrCode")) != null) {
String string = eneUsed.get(0).getString(eUMap.get(ld).getString("attrCode"));
qcProduceRun.setDataEleven(string);
}
}
}
}
}
mesQcProduceRunService.updateById(qcProduceRun);
}
private Double setMaxHeat(Map<String, JSONObject> eUMap, JSONObject jsonObject, Double heat) {
if (eUMap.get(heat1) != null) {
if (jsonObject.getString(eUMap.get(heat1).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat1).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat1).getString("attrCode")));
}
}
if (eUMap.get(heat2) != null) {
if (jsonObject.getString(eUMap.get(heat2).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat2).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat2).getString("attrCode")));
}
}
if (eUMap.get(heat3) != null) {
if (jsonObject.getString(eUMap.get(heat3).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat3).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat3).getString("attrCode")));
}
}
if (eUMap.get(heat4) != null) {
if (jsonObject.getString(eUMap.get(heat4).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat4).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat4).getString("attrCode")));
}
}
if (eUMap.get(heat5) != null) {
if (jsonObject.getString(eUMap.get(heat5).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat5).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat5).getString("attrCode")));
}
}
if (eUMap.get(heat6) != null) {
if (jsonObject.getString(eUMap.get(heat6).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat6).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat6).getString("attrCode")));
}
}
if (eUMap.get(heat7) != null) {
if (jsonObject.getString(eUMap.get(heat7).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat7).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat7).getString("attrCode")));
}
}
if (eUMap.get(heat8) != null) {
if (jsonObject.getString(eUMap.get(heat8).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat8).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat8).getString("attrCode")));
}
}
if (eUMap.get(heat9) != null) {
if (jsonObject.getString(eUMap.get(heat9).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat9).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat9).getString("attrCode")));
}
}
if (eUMap.get(heat10) != null) {
if (jsonObject.getString(eUMap.get(heat10).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat10).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat10).getString("attrCode")));
}
}
if (eUMap.get(heat11) != null) {
if (jsonObject.getString(eUMap.get(heat11).getString("attrCode")) != null && Double.valueOf(jsonObject.getString(eUMap.get(heat11).getString("attrCode"))) > heat) {
heat = Double.valueOf(jsonObject.getString(eUMap.get(heat11).getString("attrCode")));
}
}
return heat;
}
private JSONObject getDeviceParams(MesQcProduceRunEntity qcProduceRun) {
return httpRequestService.getParams(qcProduceRun.getDeviceId());
}
public static final int time2Integer(Date d) {
Calendar cal = Calendar.getInstance();
cal.setTime(d);

@ -515,8 +515,7 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
// 获取设备所需参数
// 如果没有填写退火温度
if (StringUtils.isBlank(tempSlot)) {
// todo 第三方获取
// macToolUseService.setSjDataCapture(qcProduceRun, Boolean.TRUE);
macToolUseService.setSjDataCapture(qcProduceRun, Boolean.TRUE);
}
}
mesQcProduceRunService.updateBatchById(qcProduceRuns);

@ -149,7 +149,7 @@ public class ProcessQualityMaintenanceServiceImpl implements IProcessQualityMain
MesRbFilePreserveDetailDTO mesRbFilePreserveDetailDTO = new MesRbFilePreserveDetailDTO();
BeanUtils.copyProperties(dsRbFilePreserveDetail, mesRbFilePreserveDetailDTO);
return mesRbFilePreserveDetailDTO;
}).sorted(Comparator.comparing(MesRbFilePreserveDetailDTO::getDetailIndex)).toList();
}).sorted(Comparator.comparing(dto -> Integer.parseInt(dto.getDetailIndex()))).toList();
dsRbFilePreserveSlot.setChildrenList(childrenList);
}
}

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

@ -193,23 +193,23 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
//删除检验记录
inspectionTaskService.remove(Wrappers.lambdaQuery(InspectionTask.class).eq(InspectionTask::getWpId, wpId));
// todo 删除镀前出入库记录
// List<PrPlateAround> paList = prPlateAroundService.listByWpId(wpId);
// WorkPlan workPlan = this.getById(wpId);
// if (!paList.isEmpty()) {
// for (PrPlateAround prPlateAround : paList) {
// // 如果有出库记录,删除上序的入库记录
// if (PrPlateAround.BEFORE_PLAN_OUT.equals(prPlateAround.getPaType())) {
// if (workPlan.getFrontWpId() != null) {
// PrPlateAround prPlateAround1 = prPlateAroundService.getPrPlateAround(prWorkPlan.getFrontWorkPlan().getWpId(), PrPlateAround.BEFORE_PLAT_IN);
// if (prPlateAround1 != null && prPlateAround1.getPaId() != null) {
// prPlateAroundService.delete(prPlateAround1.getPaId());
// }
// }
// }
// prPlateAroundService.delete(prPlateAround.getPaId());
// }
// }
// 删除镀前出入库记录
List<PlateAround> paList = plateAroundMapper.selectList(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, wpId));
WorkPlan workPlan = this.getById(wpId);
if (!paList.isEmpty()) {
for (PlateAround prPlateAround : paList) {
// 如果有出库记录,删除上序的入库记录
if (PlateAround.BEFORE_PLAN_OUT.equals(prPlateAround.getPaType())) {
if (workPlan.getFrontWpId() != null) {
PlateAround prPlateAround1 = plateAroundMapper.selectOne(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, workPlan.getFrontWpId()).eq(PlateAround::getPaType, PlateAround.BEFORE_PLAT_IN));
if (prPlateAround1 != null) {
plateAroundMapper.deleteById(prPlateAround1.getId());
}
}
}
plateAroundMapper.deleteById(prPlateAround.getId());
}
}
this.removeById(wpId);
}

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

@ -15,8 +15,6 @@ import org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springblade.desk.energy.util.HttpRequestService;
import org.springblade.desk.logistics.mapper.PrWorkOrderMapper;
import org.springblade.desk.logistics.pojo.entity.PrWorkOrder;
import org.springblade.desk.produce.mapper.WorkOrderMapper;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
@ -76,9 +74,6 @@ public class PlanTestServiceImpl extends BaseServiceImpl<PlanTestMapper, PlanTes
@Resource
private HttpRequestService httpRequestService;
@Resource
private PrWorkOrderMapper prWorkOrderMapper;
@Override
public JSONArray detailPage(PlanTest prPlanTest) {
PlanTest test = baseMapper.selectById(prPlanTest.getId());
@ -169,8 +164,8 @@ public class PlanTestServiceImpl extends BaseServiceImpl<PlanTestMapper, PlanTes
@Override
public JSONArray detail(PlanTest planTest) {
// 查询woId
List<PrWorkOrder> prWorkOrderList = prWorkOrderMapper.selectList(new LambdaQueryWrapper<PrWorkOrder>()
.eq(PrWorkOrder::getWpId, planTest.getWpId()));
List<WorkOrder> prWorkOrderList = workOrderMapper.selectList(new LambdaQueryWrapper<WorkOrder>()
.eq(WorkOrder::getWpId, planTest.getWpId()));
if (prWorkOrderList == null || prWorkOrderList.isEmpty()){
return null;
}
@ -188,8 +183,8 @@ public class PlanTestServiceImpl extends BaseServiceImpl<PlanTestMapper, PlanTes
.isNull(PlanTest::getResult));
if (planTestList != null && !planTestList.isEmpty()) {
for (PlanTest prPlanTest : planTestList) {
List<PrWorkOrder> prWorkOrderList = prWorkOrderMapper.selectList(new LambdaQueryWrapper<PrWorkOrder>()
.eq(PrWorkOrder::getWpId, prPlanTest.getWpId()));
List<WorkOrder> prWorkOrderList = workOrderMapper.selectList(new LambdaQueryWrapper<WorkOrder>()
.eq(WorkOrder::getWpId, prPlanTest.getWpId()));
JSONObject obj = httpRequestService.testRec(prWorkOrderList.get(0).getWoCode(), prPlanTest.getErpId(),prPlanTest.getDataId());
if (obj != null) {
JSONObject data = obj.getJSONObject("data");

@ -51,6 +51,12 @@
<version>4.6.0.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-erpdata-api</artifactId>
<version>4.6.0.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

@ -45,10 +45,10 @@ 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.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;
@ -330,5 +330,4 @@ public class WorkOrderController extends BladeController {
workOrderService.test();
return R.success();
}
}

@ -28,6 +28,8 @@ package org.springblade.scheduling.scheduling.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.core.secure.BladeUser;
import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO;
import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import org.springblade.scheduling.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.scheduling.dto.WorkOrderDto;
@ -36,6 +38,7 @@ import org.springblade.scheduling.scheduling.excel.WorkOrderExcel;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO;
import java.util.List;
import java.util.Map;
/**
* 车间订单表 服务类
@ -48,7 +51,7 @@ public interface IWorkOrderService extends BaseService<WorkOrderEntity> {
* 自定义分页
*
* @param page 分页参数
* @param WorkOrder 查询参数
* @param workOrder 查询参数
* @return IPage<WorkOrderVO>
*/
IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderVO workOrder);
@ -117,5 +120,4 @@ public interface IWorkOrderService extends BaseService<WorkOrderEntity> {
IPage<WorkPlanVO> selectProcessExecuteDetailPage(IPage<WorkPlanVO> page, WorkPlanVO workPlan);
void test();
}

@ -34,6 +34,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fasterxml.jackson.core.type.TypeReference;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@ -110,6 +111,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final ICraftAbilityService craftAbilityService;
private final IPartVersionService partVersionService;
private final IPartRelationService partRelationService;
@Resource
private final StGlassCakeOutClient glassCakeOutClient;
@Value("${business.oldMes.url}")

Loading…
Cancel
Save