diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/TestPlanInCompleteProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/TestPlanInCompleteProcessor.java new file mode 100644 index 00000000..acc695e4 --- /dev/null +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/TestPlanInCompleteProcessor.java @@ -0,0 +1,27 @@ +package org.springblade.job.processor.quality; + +import jakarta.annotation.Resource; +import org.springblade.desk.quality.feign.ITestPlanInCompleteTaskClient; +import org.springframework.stereotype.Component; +import tech.powerjob.worker.core.processor.ProcessResult; +import tech.powerjob.worker.core.processor.TaskContext; +import tech.powerjob.worker.core.processor.sdk.BasicProcessor; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 14:00 + */ +@Component +public class TestPlanInCompleteProcessor implements BasicProcessor { + + @Resource + private ITestPlanInCompleteTaskClient client; + + + @Override + public ProcessResult process(TaskContext taskContext) throws Exception { + client.testPlanIncomplete(); + return new ProcessResult(true); + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/AllocationMessPageDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/AllocationMessPageDTO.java new file mode 100644 index 00000000..66686879 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/AllocationMessPageDTO.java @@ -0,0 +1,19 @@ +package org.springblade.desk.logistics.pojo.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 15:22 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class AllocationMessPageDTO extends AllocationMessVO { + + private Integer pageNum; + + private Integer pageSize; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/AllocationMessVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/AllocationMessVO.java new file mode 100644 index 00000000..b5e26fed --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/AllocationMessVO.java @@ -0,0 +1,92 @@ +package org.springblade.desk.logistics.pojo.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 15:20 + */ +@Data +public class AllocationMessVO implements Serializable { + + /** + * 配套单号 + */ + private String pkno; + /** + * 父件号 + */ + private String prntno; + /** + * 型号 + */ + private String mtltmrk; + /** + * 生产标识 + */ + private String prtlotno; + /** + * 需求日期 + */ + private String pkreqdat; + /** + * 父件批次 + */ + private String fjSplcode; + /** + * 父件配套数 + */ + private String fjPkavqty; + /** + * 配套序号 + */ + private String serialno; + /** + * 主制部门 + */ + private String prtmdept; + /** + * 计划标记 + */ + private String plnsign; + /** + * 制造订单号 + */ + private String mono; + /** + * 计划员 + */ + private String schemer; + /** + * 调度员 + */ + private String planner1; + /** + * 配套日期 + */ + private String subpkdate; + + /** + * 保管员 + */ + private String warctlr; + /** + * 条码序号 + */ + private String barcodeno; + /** + * 计划部门 + */ + private String plandept; + /** + * 备注 + */ + private String remark; + /** + * 物料标识 + */ + private String prtclass; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ITestPlanInCompleteTaskClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ITestPlanInCompleteTaskClient.java new file mode 100644 index 00000000..96df3782 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ITestPlanInCompleteTaskClient.java @@ -0,0 +1,26 @@ +package org.springblade.desk.quality.feign; + +import org.springblade.core.launch.constant.AppConstant; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 14:01 + */ +@FeignClient( + value = AppConstant.APPLICATION_DESK_NAME +) +public interface ITestPlanInCompleteTaskClient { + + String API_PREFIX = "/feign/client/QA/PlanTest"; + + String TEST_PLAN_INCOMPLETE = API_PREFIX + "/testPlanIncomplete"; + + /** + * 转试计划未完成 + */ + @GetMapping(TEST_PLAN_INCOMPLETE) + void testPlanIncomplete(); +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/PlanTest.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/PlanTest.java index 69f154bc..cc86e71e 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/PlanTest.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/PlanTest.java @@ -11,7 +11,6 @@ import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; import java.io.Serial; -import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -197,4 +196,10 @@ public class PlanTest extends BaseEntity { */ @Schema(description = "备注") private String remark; + + /** + * 转试状态 + */ + @Schema(description = "转试状态") + private String testStatus; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/date/DateUtils.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/date/DateUtils.java index 682c7871..a788dbf4 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/date/DateUtils.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/date/DateUtils.java @@ -267,4 +267,27 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return Date.from(getYesterdayEnd().atZone(ZoneId.systemDefault()).toInstant()); } + /** + * 获取当月开始时间 + * @param date 当前时间 + * @return 当月开始时间 (Date类型) + */ + public static Date getMonthStartTime(Date date) { + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDateTime startOfMonth = localDate.withDayOfMonth(1).atStartOfDay(); + return Date.from(startOfMonth.atZone(ZoneId.systemDefault()).toInstant()); + } + + /** + * 获取当月结束时间 + * @param date 当前时间 + * @return 当月结束时间 (Date类型) + */ + public static Date getMonthEndTime(Date date) { + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDateTime endOfMonth = localDate.withDayOfMonth(localDate.lengthOfMonth()) + .atTime(LocalTime.MAX); + return Date.from(endOfMonth.atZone(ZoneId.systemDefault()).toInstant()); + } + } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataLogisticsClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataLogisticsClient.java new file mode 100644 index 00000000..ad4acac4 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataLogisticsClient.java @@ -0,0 +1,42 @@ +package org.springblade.erpdata.feign; + +import org.springblade.common.constant.LauncherConstant; +import org.springblade.core.tool.api.R; +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; +import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.List; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 15:52 + */ +@FeignClient( + value = LauncherConstant.APPLICATION_ERP_DATA_NAME, + fallback = IErpDataLogisticsClientFallback.class +) +public interface IErpDataLogisticsClient { + + String API_PREFIX = "/feign/erpdata/logistics"; + String QUERY_ALLOCATION_MESS = API_PREFIX + "/queryAllocationMess"; + String QUERY_ALLOCATION_MESS_NUM = API_PREFIX + "/queryAllocationMessNum"; + + /** + * 查询调拨单 + * @param dto 查询条件 + * @return 调拨单 + */ + @GetMapping(QUERY_ALLOCATION_MESS) + R> queryAllocationMess(AllocationMessPageDTO dto); + + /** + * 查询调拨单数量 + * @param dto 查询条件 + * @return 数量 + */ + @GetMapping(QUERY_ALLOCATION_MESS_NUM) + R queryAllocationMessNum(AllocationMessPageDTO dto); +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataLogisticsClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataLogisticsClientFallback.java new file mode 100644 index 00000000..4b0897da --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataLogisticsClientFallback.java @@ -0,0 +1,27 @@ +package org.springblade.erpdata.feign; + +import org.springblade.core.tool.api.R; +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; +import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 15:55 + */ +@Component +public class IErpDataLogisticsClientFallback implements IErpDataLogisticsClient{ + + @Override + public R> queryAllocationMess(AllocationMessPageDTO dto) { + return R.fail("获取数据失败"); + } + + @Override + public R queryAllocationMessNum(AllocationMessPageDTO dto) { + return R.fail("获取数据失败"); + } +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java index 35dc6cec..521908ee 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java @@ -44,6 +44,8 @@ public interface IErpDataProduceClient { String SIGN_DELETE = API_PREFIX + "/signDelete"; String SAVE_DECLARE = API_PREFIX + "/saveDeclare"; + String TRAIL_ITEM_LIST = API_PREFIX + "/trialItemList"; + /** * 缺件申报-通过零件号获取批次号 */ @@ -171,4 +173,12 @@ public interface IErpDataProduceClient { @RequestParam(value = "quaLevel") String quaLevel, @RequestParam(value = "deptNo") String deptNo, @RequestParam(value = "warnNo") String warnNo, @RequestParam(value = "locationNo") String locationNo, @RequestParam(value = "woCode", required = false) String woCode, @RequestParam(value = "userName") String userName); + + /** + * 获取转试的试验计划 + * @param nameList 试验计划名称 + * @return 结果 + */ + @GetMapping(TRAIL_ITEM_LIST) + R>> trialItemList(List nameList); } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java index 7dd2835d..1ae44cf7 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java @@ -101,4 +101,9 @@ public class IErpDataProduceClientFallback implements IErpDataProduceClient { return R.fail("获取数据失败"); } + @Override + public R>> trialItemList(List nameList) { + return R.fail("获取数据失败"); + } + } diff --git a/blade-service/blade-desk/pom.xml b/blade-service/blade-desk/pom.xml index 858cfae3..b2ec9998 100644 --- a/blade-service/blade-desk/pom.xml +++ b/blade-service/blade-desk/pom.xml @@ -145,6 +145,12 @@ com.qcloud cos_api + + + org.springblade + blade-auth + 4.6.0.RELEASE + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/util/HttpRequestService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/util/HttpRequestService.java index 0d64fc33..4a521853 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/util/HttpRequestService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/util/HttpRequestService.java @@ -1,9 +1,12 @@ package org.springblade.desk.energy.util; import com.alibaba.fastjson.JSONObject; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; 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.*; @@ -15,14 +18,17 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; +import java.util.Date; import java.util.List; + @Service @RequiredArgsConstructor public class HttpRequestService { - private static final Logger log = LoggerFactory.getLogger(HttpRequestService.class); - + @Resource private final RestTemplate httpClientTemplate; + + private static final Logger log = LoggerFactory.getLogger(HttpRequestService.class); private final IBsTowerReportService epTowerRecService; private final IBsWasteGasRunRecService epWasteGasRunRecService; private final IRpParameterSetService rpParameterSetServer; @@ -33,7 +39,8 @@ public class HttpRequestService { @Value("${request.iotNew.url}") private String iotNewUrl; - + @Value("${request.lims.url}") + private String limsUrl; /** *

Description: 获取看板废水废气酸雾塔实时数据新接口

@@ -85,5 +92,82 @@ public class HttpRequestService { return null; } + /** + *

Description: 发起转试的试验计划

+ * + * @param batchNo + * @param quantity + * @param woCode + * @param remark + * @param value + * @param label + * @param i + * @param curUserInfo + * @param partCode + * @param partName + * @param productType + * @param pptCode + * @Author cdl + * @Date: 2024/3/15 10:41 + */ + 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 { + // 头信息 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + JSONObject object = new JSONObject(); + object.put("turnUser", curUserInfo.getNickName()); + object.put("userDesc", curUserInfo.getUserName()); + object.put("turnDept", "3400"); + object.put("trueDate", new Date()); + object.put("remark", remark); + object.put("model", productType); + object.put("sampleName", partName); + object.put("sampleCode", partCode); + object.put("batchCode", batchNo); + object.put("sampleQuantity", quantity); + object.put("samplestr1", woCode); + object.put("samplestr2", label); + object.put("expsn", "1"); + object.put("flowid", pptCode); + HttpEntity entity = new HttpEntity<>(object, headers); + ResponseEntity responseEntity = null; + try { + //记录参数传递信息 + log.info("转试传递参数,参数:{}", object.toJSONString()); + responseEntity = httpClientTemplate.postForEntity(limsUrl + "/api/cloud-customized/zhonghanggd/zhgdMesLxDatasources/transferApplication", entity, JSONObject.class); + JSONObject result = responseEntity.getBody(); + if (result != null && result.getBoolean("success")) { + return result.getJSONObject("data"); + } else { + log.error("发起转试计划接口调用失败!" + result.getString("msg")); + } + } catch (Exception e) { + log.error("发起转试计划接口调用失败!" + e.getMessage()); + } + return null; + } + public JSONObject testRec(String woCode, String erpId, String str1) { + // 头信息 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + JSONObject object = new JSONObject(); + object.put("workOrderCode", woCode); + object.put("id", str1); +// object.put("id", erpId); + HttpEntity entity = new HttpEntity<>(object, headers); + ResponseEntity responseEntity = null; + try { + responseEntity = httpClientTemplate.postForEntity(limsUrl + "/api/cloud-customized/zhonghanggd/zhgdMesLxDatasources/mesGetLxList", entity, JSONObject.class); + JSONObject result = responseEntity.getBody(); + if (result != null && result.getBoolean("success")) { + return result.getJSONObject("data"); + } else { + log.error("转试计划详情接口调用失败!" + result.getString("msg")); + } + } catch (Exception e) { + log.error("转试计划详情接口调用失败!" + e.getMessage()); + } + return null; + } } \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PrWorkOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PrWorkOrderController.java new file mode 100644 index 00000000..c14baa33 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PrWorkOrderController.java @@ -0,0 +1,37 @@ +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> queryAllocationMess(@RequestBody AllocationMessPageDTO allocationMessPageDTO) { + return R.data(prWorkOrderService.queryAllocationMess(allocationMessPageDTO)); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkOrderService.java index 86975e93..25734adb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkOrderService.java @@ -27,10 +27,14 @@ 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; /** * 车间订单 服务类 @@ -40,4 +44,10 @@ import java.math.BigDecimal; */ public interface IPrWorkOrderService extends IService { + /** + * 查询分配信息 + * @param dto 查询条件 + * @return 分配信息 + */ + Map queryAllocationMess(AllocationMessPageDTO dto); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkPlanService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkPlanService.java index bf50bef0..d25a927e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkPlanService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IPrWorkPlanService.java @@ -27,9 +27,13 @@ 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; + /** * 车间订单序号 服务类 * @@ -37,4 +41,24 @@ import org.springblade.desk.logistics.pojo.entity.PrWorkPlan; * @since 2025-11-12 */ public interface IPrWorkPlanService extends IService { + + /** + * 根据订单id查询 + * @param woId 订单id + * @return 是否符合转试条件 + */ + Boolean isTransferTest(Long woId); + + /** + * 试转项目列表 + * @return 试转项目列表 + */ + List> trialItemList(); + + /** + * 发起试转 + * @param data 试转数据 + * @param user 用户 + */ + void launchTest(Map data, BladeUser user) throws Exception; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkOrderServiceImpl.java index 1700adcd..d769cec2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkOrderServiceImpl.java @@ -26,17 +26,25 @@ 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; /** * 车间订单、 服务实现类 @@ -46,7 +54,20 @@ import java.math.BigDecimal; */ @Service @Slf4j +@AllArgsConstructor public class PrWorkOrderServiceImpl extends ServiceImpl implements IPrWorkOrderService { + @Resource + private IErpDataLogisticsClient erpDataLogisticsClient; + @Override + public Map queryAllocationMess(AllocationMessPageDTO dto) { + List allocationMessList = erpDataLogisticsClient.queryAllocationMess(dto).getData(); + int totalAllocationMessNum = erpDataLogisticsClient.queryAllocationMessNum(dto).getData(); + Map result = new HashMap<>(3); + result.put("current",dto.getPageNum()); + result.put("record",allocationMessList); + result.put("total",totalAllocationMessNum); + return result; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkPlanServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkPlanServiceImpl.java index 055de183..9fb27963 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkPlanServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PrWorkPlanServiceImpl.java @@ -1,38 +1,35 @@ -package org.springblade.desk.logistics.service.impl; /** - * BladeX Commercial License Agreement - * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. - *

- * Use of this software is governed by the Commercial License Agreement - * obtained after purchasing a license from BladeX. - *

- * 1. This software is for development use only under a valid license - * from BladeX. - *

- * 2. Redistribution of this software's source code to any third party - * without a commercial license is strictly prohibited. - *

- * 3. Licensees may copyright their own code but cannot use segments - * from this software for such purposes. Copyright of this software - * remains with BladeX. - *

- * Using this software signifies agreement to this License, and the software - * must not be used for illegal purposes. - *

- * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is - * not liable for any claims arising from secondary or illegal development. - *

- * Author: Chill Zhuang (bladejava@qq.com) - */ +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; + /** * 车间订单、 服务实现类 * @@ -41,7 +38,160 @@ import org.springframework.stereotype.Service; */ @Service @Slf4j +@AllArgsConstructor public class PrWorkPlanServiceImpl extends ServiceImpl 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 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> trialItemList() { + // 构造 SQL 查询语句 + List basicClazzList = basicClazzMapper.selectList(new LambdaQueryWrapper() + .eq(BasicClazz::getBizType, 11)); + List nameList = basicClazzList.stream().map(BasicClazz::getName).collect(Collectors.toList()); + List> mapList = erpDataProduceClient.trialItemList(nameList).getData(); + // 转换查询结果 + List> result = new ArrayList<>(); + if (mapList != null && !mapList.isEmpty()) { + for (Map map : mapList) { + Map item = new HashMap<>(); + item.put("value", map.get("key") != null ? map.get("key") : ""); + item.put("label", map.get("value") != null ? map.get("value") : ""); + result.add(item); + } + } + return result; + } + + @Override + public void launchTest(Map data, BladeUser user) throws Exception { + // 提取参数 + String batchNo = (String) data.get("batchNo"); + Integer quantity = Integer.parseInt(data.get("quantity").toString()); + String woCode = (String) data.get("woCode"); + String remark = (String) data.get("remark"); + String partCode = (String) data.get("partCode"); + String productType = (String) data.get("productType"); + String partName = (String) data.get("partName"); + Object testListObj = data.get("testList"); + JSONArray testList = (JSONArray) JSON.toJSON(testListObj); + Long woId = Long.parseLong(data.get("woId").toString()); + + // 生成转试单号 + String pptCode = generatePptCode(); + + // 获取相关工序 + 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 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); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java index c1fe2757..20914ed7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java @@ -4,17 +4,21 @@ 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.order.service.IYieldPlanService; +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.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; /** * 车间作业计划 控制器 @@ -30,7 +34,7 @@ public class PrWorkPlanController extends BladeController { private final IWorkPlanService workPlanService; - private final IYieldPlanService yieldPlanService; + private final IPrWorkPlanService prWorkPlanService; /** * 车间作业计划 @@ -42,4 +46,30 @@ public class PrWorkPlanController extends BladeController { IPage pages = workPlanService.queryWorkPlan(Condition.getPage(query), cardNo); return R.data(pages); } + + /** + * [转试记录] 判断是否符合转试条件 + */ + @PostMapping("/isTransferTest") + @ApiOperationSupport(order = 72) + @Operation(summary = "是否符合转试条件", description = "Long woId 订单id") + public R isTransferTest(@RequestParam("woId") Long woId) { + return R.data(prWorkPlanService.isTransferTest(woId)); + } + + @PostMapping("/trialItemList") + @ApiOperationSupport(order = 73) + @Operation(summary = "获取转试的试验计划", description = "无需传参") + public R>> trialItemList() { + return R.data(prWorkPlanService.trialItemList()); + } + + @PostMapping("/launchTest") + @ApiOperationSupport(order = 73) + @Operation(summary = "发起试验计划", description = "无需传参") + public R launchTest(@RequestBody Map data, HttpServletRequest request) throws Exception { + BladeUser user = AuthUtil.getUser(); + prWorkPlanService.launchTest(data, user); + return R.success(); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java index 19b6a665..ad0586ed 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java @@ -2,6 +2,7 @@ package org.springblade.desk.produce.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartSub; import org.springblade.desk.produce.pojo.dto.MesRbFilePreserveDetailDTO; @@ -16,6 +17,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.List; +import java.util.Map; /** * 车间作业计划 Mapper 接口 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java index f40bc2d2..66a8ee8f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java @@ -1,16 +1,21 @@ package org.springblade.desk.produce.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.common.exception.BusinessException; import org.springblade.core.mp.base.BaseService; +import org.springblade.core.secure.BladeUser; import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkPlan; import org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO; import org.springblade.desk.produce.pojo.vo.WorkPlanProVO; +import org.springblade.desk.quality.pojo.entity.WorkPlanItem; import org.springblade.scheduling.pojo.entity.WorkPlanEntity; import org.springblade.desk.produce.pojo.vo.WorkPlanVO; import java.util.Date; import java.util.List; +import java.util.Map; /** * 车间作业计划 服务类 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index c00d8b67..115880e4 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -1085,13 +1085,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl prPlanTests = planTestService.list(Wrappers.lambdaQuery(PlanTest.class).eq(PlanTest::getWpId, prWorkPlan.getId())); + List prPlanTests = planTestService.list(Wrappers.lambdaQuery(PlanTest.class).eq(PlanTest::getWpId, prWorkPlan.getPpsId())); if (prPlanTests != null && !prPlanTests.isEmpty()) { for (PlanTest planTest : prPlanTests) { newPlanTest = new PlanTest(); BeanUtils.copyProperties(planTest, newPlanTest); newPlanTest.setId(null); - newPlanTest.setWpId(workPlan.getId()); + newPlanTest.setWpId(workPlan.getPpsId()); planTestService.save(newPlanTest); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java index e7551596..4d1b047d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java @@ -3,6 +3,7 @@ package org.springblade.desk.produce.service.impl; import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -83,6 +84,7 @@ public class WorkPlanServiceImpl extends BaseServiceImpl> queryWorkOrder(@RequestBody PlanTest planTest) { + QueryWrapper qw = Condition.getQueryWrapper(planTest); + BladeUser user = AuthUtil.getUser(); + qw.eq("test_user_id", user.getUserId()); + List planTestList = service.list(qw); + return R.data(planTestList); + } + + + @GetMapping(value = "/isHasTestPlan/{wpId}") + @ApiOperationSupport(order = 74) + @Operation(summary = "获取是否包含转试记录", description = "wpId 工序计划id") + public R isHasTestPlan(@PathVariable Long wpId) throws Exception { + return R.data(service.isHasTestPlan(wpId)); + } + + @PostMapping(value = "/detailPageInfo") + @ApiOperationSupport(order = 75) + @Operation(summary = "转试详情", description = "prPlanTest 转试记录") + public R detailPageInfo(@RequestBody PlanTest planTest) { + return R.data(service.detail(planTest)); + } + + @GetMapping(value = "/testPlanIncomplete") + @ApiOperationSupport(order = 76) + @Operation(summary = "转试计划未完成", description = "filterContext 查询参数") + public R testPlanIncomplete() { + service.testPlanIncomplete(); + return R.success(); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/TestPlanInCompleteTaskClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/TestPlanInCompleteTaskClient.java new file mode 100644 index 00000000..27094a38 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/TestPlanInCompleteTaskClient.java @@ -0,0 +1,24 @@ +package org.springblade.desk.quality.feign; + +import io.swagger.v3.oas.annotations.Hidden; +import jakarta.annotation.Resource; +import org.springblade.desk.quality.service.IPlanTestService; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 14:36 + */ +@RestController +@Hidden() +public class TestPlanInCompleteTaskClient implements ITestPlanInCompleteTaskClient{ + + @Resource + private IPlanTestService planTestService; + + @Override + public void testPlanIncomplete() { + planTestService.testPlanIncomplete(); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/PlanTestMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/PlanTestMapper.java index bb4e6edc..212111d8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/PlanTestMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/PlanTestMapper.java @@ -7,10 +7,12 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springblade.desk.quality.excel.PlanTestExcel; import org.springblade.desk.quality.pojo.entity.PlanTest; import org.springblade.desk.quality.pojo.vo.PlanTestVO; +import java.util.Date; import java.util.List; /** @@ -37,4 +39,14 @@ public interface PlanTestMapper extends BaseMapper { * @return List */ List exportPlanTest(@Param("ew") Wrapper queryWrapper); + + /** + * 获取最新数据 + * @param startOfMonth 开始月份 + * @param endOfMonth 结束月份 + * @return 最新数据 + */ + @Select("SELECT * FROM ( SELECT * FROM qa_plan_test WHERE test_time BETWEEN " + + "#{startOfMonth} AND #{endOfMonth} ORDER BY test_time DESC ) WHERE ROWNUM = 1") + PlanTest getLatestDataByMonth(@Param("startOfMonth") Date startOfMonth, @Param("endOfMonth") Date endOfMonth); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IPlanTestService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IPlanTestService.java index b9080ae0..c7dbdbe5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IPlanTestService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IPlanTestService.java @@ -5,12 +5,14 @@ package org.springblade.desk.quality.service; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.quality.excel.PlanTestExcel; import org.springblade.desk.quality.pojo.entity.PlanTest; import org.springblade.desk.quality.pojo.vo.PlanTestVO; +import java.util.Date; import java.util.List; /** @@ -48,4 +50,30 @@ public interface IPlanTestService extends BaseService { * @param vo */ void setVOValue(PlanTestVO vo); + + /** + * 获取最新数据 + * @param date 月份 + * @return 最新数据 + */ + PlanTest getLatestData(Date date); + + /** + * 是否有转试计划 + * @param wpId 工序id + * @return 是否有转试计划 + */ + Boolean isHasTestPlan(Long wpId); + + /** + * 详情 + * @param planTest 转试记录 + * @return 详情 + */ + JSONArray detail(PlanTest planTest); + + /** + * 转试计划未完成 + */ + void testPlanIncomplete(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IWorkPlanItemService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IWorkPlanItemService.java index 9772b7ea..f46e02e2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IWorkPlanItemService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IWorkPlanItemService.java @@ -55,4 +55,11 @@ public interface IWorkPlanItemService extends BaseService { void saveCheckItem(WorkPlan wp, List checkItemList, List deleteIds, String s); void deleteItem(List deleteIds); + + /** + * 根据订单id查询 + * @param woId 订单id + * @return 工序检验项 + */ + List listByWoId(Long woId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/PlanTestServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/PlanTestServiceImpl.java index 84470846..fdc8816c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/PlanTestServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/PlanTestServiceImpl.java @@ -6,35 +6,40 @@ package org.springblade.desk.quality.service.impl; 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; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.annotation.Resource; -import lombok.AllArgsConstructor; import lombok.Data; -import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +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; -import org.springblade.desk.produce.service.IWorkOrderService; import org.springblade.desk.produce.service.IWorkPlanService; import org.springblade.desk.quality.excel.PlanTestExcel; import org.springblade.desk.quality.mapper.PlanTestMapper; import org.springblade.desk.quality.pojo.entity.PlanTest; import org.springblade.desk.quality.pojo.vo.PlanTestVO; import org.springblade.desk.quality.service.IPlanTestService; +import org.springblade.desk.util.date.DateUtils; import org.springblade.system.feign.IDictClient; import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.UserInfo; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; +import org.springframework.context.annotation.Lazy; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; +import java.util.Date; import java.util.List; /** @@ -59,13 +64,21 @@ public class PlanTestServiceImpl extends BaseServiceImpl entity = new HttpEntity<>(object, headers); ResponseEntity responseEntity = null; try { @@ -138,4 +150,69 @@ public class PlanTestServiceImpl extends BaseServiceImpl planTestList = this.list(new LambdaQueryWrapper() + .eq(PlanTest::getWpId, wpId) + .isNull(PlanTest::getResult)); + return planTestList != null && !planTestList.isEmpty(); + } + + @Override + public JSONArray detail(PlanTest planTest) { + // 查询woId + List prWorkOrderList = prWorkOrderMapper.selectList(new LambdaQueryWrapper() + .eq(PrWorkOrder::getWpId, planTest.getWpId())); + if (prWorkOrderList == null || prWorkOrderList.isEmpty()){ + return null; + } + JSONObject obj = httpRequestService.testRec(prWorkOrderList.get(0).getWoCode(), planTest.getErpId(),planTest.getDataId()); + if (obj != null) { + JSONObject data = obj.getJSONObject("data"); + return data.getJSONArray("nodeEndTime"); + } + return null; + } + + @Override + public void testPlanIncomplete() { + List planTestList = this.list(new LambdaQueryWrapper() + .isNull(PlanTest::getResult)); + if (planTestList != null && !planTestList.isEmpty()) { + for (PlanTest prPlanTest : planTestList) { + List prWorkOrderList = prWorkOrderMapper.selectList(new LambdaQueryWrapper() + .eq(PrWorkOrder::getWpId, prPlanTest.getWpId())); + JSONObject obj = httpRequestService.testRec(prWorkOrderList.get(0).getWoCode(), prPlanTest.getErpId(),prPlanTest.getDataId()); + if (obj != null) { + JSONObject data = obj.getJSONObject("data"); + // 修改试验记录 + prPlanTest.setTestStatus(data.getString("curNode")); + // 被退回 + if ("1".equals(data.getString("returnFlag"))) { + prPlanTest.setTestStatus("退回"); + prPlanTest.setResult(StringUtils.isNotBlank(obj.getString("message")) ? obj.getString("message") : "退回"); + continue; + } + + JSONArray nodeEndTime = data.getJSONArray("nodeEndTime"); + if (nodeEndTime != null && !nodeEndTime.isEmpty()) { + JSONObject object = nodeEndTime.getObject(nodeEndTime.size() - 1, JSONObject.class); + String node = object.getString("node"); + if (StringUtils.isBlank(prPlanTest.getTestStatus())) { + prPlanTest.setTestStatus(node); + } + } + this.updateById(prPlanTest); + } + } + } + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/WorkPlanItemServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/WorkPlanItemServiceImpl.java index 104dccc2..017afcb0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/WorkPlanItemServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/WorkPlanItemServiceImpl.java @@ -18,6 +18,7 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.api.R; import org.springblade.desk.basic.util.IdUtil; +import org.springblade.desk.produce.mapper.WorkPlanMapper; import org.springblade.desk.produce.pojo.entity.WorkPlan; import org.springblade.desk.quality.constant.InspectionItemConst; import org.springblade.desk.quality.excel.WorkPlanItemExcel; @@ -41,6 +42,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * [工序检验项] 服务实现类 @@ -68,6 +70,9 @@ public class WorkPlanItemServiceImpl extends BaseServiceImpl selectWorkPlanItemPage(IPage page, WorkPlanItemVO workPlanItem) { @@ -223,4 +228,26 @@ public class WorkPlanItemServiceImpl extends BaseServiceImpl listByWoId(Long woId) { + if (woId == null) { + return null; + } + // 创建查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + // 关联查询条件 + queryWrapper.exists( + "SELECT 1 FROM PR_WORK_PLAN wp " + + "JOIN BS_PROCESS_SET ps ON wp.pps_id = ps.id " + + "WHERE wp.wo_id = {0} " + + "AND ps.name <> {1}", + woId, "烧结包装防护" + ); + // 其他条件 + queryWrapper.ne(WorkPlanItem::getItemName, "单件包装材料数量") + .orderByAsc(WorkPlanItem::getItemCode) + .orderByDesc(WorkPlanItem::getId); + return this.list(queryWrapper); + } } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataLogisticsClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataLogisticsClient.java new file mode 100644 index 00000000..6c4885f7 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataLogisticsClient.java @@ -0,0 +1,37 @@ +package org.springblade.erpdata.feign; + +import io.swagger.v3.oas.annotations.Hidden; +import jakarta.annotation.Resource; +import lombok.AllArgsConstructor; +import org.springblade.core.tenant.annotation.NonDS; +import org.springblade.core.tool.api.R; +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; +import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; +import org.springblade.erpdata.service.IErpDataLogisticsService; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 15:50 + */ +@NonDS +@Hidden +@RestController +@AllArgsConstructor +public class ErpDataLogisticsClient implements IErpDataLogisticsClient { + + @Resource + private final IErpDataLogisticsService erpDataLogisticsService; + @Override + public R> queryAllocationMess(AllocationMessPageDTO dto) { + return R.data(erpDataLogisticsService.queryAllocationMess(dto)); + } + + @Override + public R queryAllocationMessNum(AllocationMessPageDTO dto) { + return R.data(erpDataLogisticsService.queryAllocationMessNum(dto)); + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java index 5d3b561d..dbac4368 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java @@ -111,4 +111,9 @@ public class ErpDataProduceClient implements IErpDataProduceClient { return R.data(erpDataProduceService.saveDeclare(partCode, batchNo, quantity, remark, quaLevel, deptNo, warnNo, locationNo, woCode, userName)); } + @Override + public R>> trialItemList(List nameList) { + return R.data(erpDataProduceService.trialItemList(nameList)); + } + } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataLogisticsMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataLogisticsMapper.xml new file mode 100644 index 00000000..64b9eea5 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataLogisticsMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + \ No newline at end of file diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataLogisticsServiceMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataLogisticsServiceMapper.java new file mode 100644 index 00000000..6b3fbcc7 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataLogisticsServiceMapper.java @@ -0,0 +1,29 @@ +package org.springblade.erpdata.mapper; + +import com.baomidou.mybatisplus.core.mapper.Mapper; +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; +import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; + +import java.util.List; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 16:16 + */ +public interface ErpDataLogisticsServiceMapper extends Mapper { + + /** + * 查询调拨单 + * @param dto 查询条件 + * @return 调拨单列表 + */ + List queryAllocationMess(AllocationMessPageDTO dto); + + /** + * 查询调拨单数量 + * @param dto 查询条件 + * @return 调拨单数量 + */ + Integer queryAllocationMessNum(AllocationMessPageDTO dto); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.java index 41a3bd12..6c4dc6b3 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.java @@ -4,12 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.Mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.desk.oem.pojo.request.PriceSheetQuery; import org.springblade.desk.oem.pojo.vo.PriceSheetVO; -import org.springblade.erpdata.pojo.dto.ReworkProcessDTO; -import org.springblade.erpdata.pojo.vo.QueryBatchVO; -import org.springblade.erpdata.pojo.vo.ReworkProcessVO; import java.util.List; -import java.util.Map; /** * Mapper 接口 diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.java index 55868371..04012380 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.java @@ -38,4 +38,6 @@ public interface ErpDataProduceMapper extends Mapper { Integer loadReworkPlanSize(String reworkCode, String partCode, String batchNo); List loadReworkNoProcess(); + + List> trialItemList(List nameList); } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.xml index 9162d66e..67f0a9ec 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.xml +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.xml @@ -176,4 +176,15 @@ + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataLogisticsService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataLogisticsService.java new file mode 100644 index 00000000..0f468ccb --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataLogisticsService.java @@ -0,0 +1,28 @@ +package org.springblade.erpdata.service; + +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; +import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; + +import java.util.List; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 16:08 + */ +public interface IErpDataLogisticsService { + + /** + * 查询调拨单 + * @param dto 查询参数 + * @return 调拨单 + */ + List queryAllocationMess(AllocationMessPageDTO dto); + + /** + * 查询调拨单数量 + * @param dto 查询参数 + * @return 调拨单 + */ + Integer queryAllocationMessNum(AllocationMessPageDTO dto); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java index b46c6d04..cbec9949 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java @@ -48,4 +48,11 @@ public interface IErpDataProduceService { Boolean signDeleteErp(String useCode); String saveDeclare(String partCode, String batchNo, Integer quantity, String remark, String quaLevel, String deptNo, String warnNo, String locationNo, String woCode, String userName); + + /** + * 获取转试的试验计划 + * @param nameList 试验计划名称 + * @return 结果 + */ + List> trialItemList(List nameList); } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataLogisticsServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataLogisticsServiceImpl.java new file mode 100644 index 00000000..c1bbebd0 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataLogisticsServiceImpl.java @@ -0,0 +1,34 @@ +package org.springblade.erpdata.service.impl; + +import jakarta.annotation.Resource; +import lombok.AllArgsConstructor; +import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; +import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; +import org.springblade.erpdata.mapper.ErpDataLogisticsServiceMapper; +import org.springblade.erpdata.service.IErpDataLogisticsService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author 石玖洲 + * @Description + * @create 2026-04-22 16:12 + */ +@Service +@AllArgsConstructor +public class ErpDataLogisticsServiceImpl implements IErpDataLogisticsService { + + @Resource + private final ErpDataLogisticsServiceMapper erpDataLogisticsServiceMapper; + + @Override + public List queryAllocationMess(AllocationMessPageDTO dto) { + return erpDataLogisticsServiceMapper.queryAllocationMess(dto); + } + + @Override + public Integer queryAllocationMessNum(AllocationMessPageDTO dto) { + return erpDataLogisticsServiceMapper.queryAllocationMessNum(dto); + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java index 78688631..c33f2270 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java @@ -1,5 +1,6 @@ package org.springblade.erpdata.service.impl; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.log.exception.ServiceException; @@ -28,6 +29,7 @@ import java.util.*; @Service public class ErpDataProduceServiceImpl implements IErpDataProduceService { + @Resource private final ErpDataProduceMapper erpDataProduceMapper; private final JdbcTemplate jdbcTemplate; @@ -306,4 +308,9 @@ public class ErpDataProduceServiceImpl implements IErpDataProduceService { } return (String) code; } + + @Override + public List> trialItemList(List nameList) { + return erpDataProduceMapper.trialItemList(nameList); + } }