liweidong
liweidong-hj 3 weeks ago
commit 7f445198e6
  1. 43
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/wms/AutoCheckMeasuringToolProcessor.java
  2. 30
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/feign/ErpMeaToolTaskClient.java
  3. 62
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/MeasuringUpkeepEntity.java
  4. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/PriceMatcher.java
  5. 20
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java
  6. 4
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java
  7. 38
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClient.java
  8. 26
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClientFallback.java
  9. 26
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/MeasuringToolMaintainVO.java
  10. 49
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/PurchaseTrackVO.java
  11. 41
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StBuyOrder.java
  12. 27
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/feign/ErpMeaToolTaskClientImpl.java
  13. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/mapper/MeasuringUpkeepMapper.java
  14. 34
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/mapper/MeasuringUpkeepMapper.xml
  15. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasuringUpkeepService.java
  16. 53
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/MeasuringUpkeepServiceImpl.java
  17. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java
  18. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/pojo/entity/FmProjectMilestoneEntity.java
  19. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/service/impl/FmProjectApplicationServiceImpl.java
  20. 33
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/service/impl/FmProjectMilestoneServiceImpl.java
  21. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java
  22. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml
  23. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml
  24. 110
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  25. 510
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java
  26. 8
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataOemClientImpl.java
  27. 23
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataWmsClient.java
  28. 7
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataWmsMapper.java
  29. 25
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataWmsMapper.xml
  30. 10
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java
  31. 10
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataWmsService.java
  32. 240
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java
  33. 100
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataWmsServiceImpl.java
  34. 23
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java
  35. 7
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StBuyOrderController.java
  36. 1
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StMoldApplyForController.java
  37. 22
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StWmsRequestController.java
  38. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStBuyOrderService.java
  39. 4
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStWmsRequestService.java
  40. 25
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StBuyOrderServiceImpl.java
  41. 69
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StWmsRequestServiceImpl.java

@ -0,0 +1,43 @@
package org.springblade.job.processor.wms;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.device.feign.ErpMeaToolTaskClient;
import org.springblade.wms.feign.WmsTaskClient;
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;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName AutoCheckMeasuringToolProcessor
* @description:
* @autor: WuSiYu
* @create 2026-05-27 10:27
**/
@Component
@Data
@Slf4j
public class AutoCheckMeasuringToolProcessor implements BasicProcessor {
@Resource
ErpMeaToolTaskClient erpMeaToolTaskClient;
@Override
public ProcessResult process(TaskContext context) throws Exception {
log.info("开始执行量具自动检定");
try {
// 调用远程服务执行量具检定逻辑
erpMeaToolTaskClient.autoCheckMeasuringTool();
log.info("===== 量具自动检定完成 =====");
return new ProcessResult(result);
} catch (Exception e) {
log.error("===== 量具自动检定异常 =====", e);
return new ProcessResult(false, e.getMessage());
}
}
}

@ -0,0 +1,30 @@
package org.springblade.desk.device.feign;
import org.springblade.core.launch.constant.AppConstant;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName ErpMeaToolTaskClient
* @description:
* @autor: WuSiYu
* @create 2026-05-28 14:38
**/
@FeignClient(
value = AppConstant.APPLICATION_DESK_NAME
)
public interface ErpMeaToolTaskClient {
String API_PREFIX = "/feign/client/erp-task";
String AUTO_CHECK_MEASURING_TOOL = API_PREFIX + "/autoCheckMeasuringTool";
/**
* 同步量具数据
*/
@GetMapping(AUTO_CHECK_MEASURING_TOOL)
void autoCheckMeasuringTool();
}

@ -1,17 +1,13 @@
package org.springblade.desk.device.pojo.entity; package org.springblade.desk.device.pojo.entity;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import java.math.BigDecimal; import lombok.Data;
import java.util.Date;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial; import java.io.Serial;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -54,7 +50,42 @@ public class MeasuringUpkeepEntity extends BaseEntity {
* 审批状态;-1 * 审批状态;-1
*/ */
@Schema(description = "审批状态;-1") @Schema(description = "审批状态;-1")
private Short approvalStatus; private Short approvalStaus;
/**
* 物料编号
*/
@Schema(description = "物料编号")
private String goodsCode;
/**
* 库房编号
*/
@Schema(description = "库房编号")
private String shCode;
/**
* 库位号
*/
@Schema(description = "库位号")
private String location;
/**
* 生产标识
*/
@Schema(description = "生产标识")
private String quantityLevel;
/**
* 检定数量
*/
@Schema(description = "检定数量")
private Double checkQty;
/**
* 检定确认时间
*/
@Schema(description = "检定确认时间")
private Date checkTime;
/**
* 检定标记
*/
@Schema(description = "检定标记")
private Integer checkFlag;
/** /**
* 库存物料 * 库存物料
*/ */
@ -69,6 +100,21 @@ public class MeasuringUpkeepEntity extends BaseEntity {
*/ */
public static Integer CURSTATUS_YSQ = 1; public static Integer CURSTATUS_YSQ = 1;
/**
* 检定标记 - 未检查
*/
public static Integer CHECK_FLAG_UNCHECKED = 0;
/**
* 检定标记 - 检验合格
*/
public static Integer CHECK_FLAG_PASS = 1;
/**
* 检定标记 - 检验不合格
*/
public static Integer CHECK_FLAG_FAIL = 2;
public static Map<Integer, String> curStatusMap = new HashMap<>(3); public static Map<Integer, String> curStatusMap = new HashMap<>(3);
static { static {

@ -1,5 +1,7 @@
package org.springblade.desk.util; package org.springblade.desk.util;
import com.alibaba.excel.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
@ -45,6 +47,9 @@ public class PriceMatcher {
* 判断备注是否包含目标价格 * 判断备注是否包含目标价格
*/ */
private static boolean containsPrice(String remark, BigDecimal targetPrice) { private static boolean containsPrice(String remark, BigDecimal targetPrice) {
if(StringUtils.isEmpty(remark)){
return false;
}
// 正则表达式匹配价格范围或单价 // 正则表达式匹配价格范围或单价
// 匹配如:350.01-360、467.5、100.5-200.8 // 匹配如:350.01-360、467.5、100.5-200.8
String regex = "(\\d+(?:\\.\\d+)?)(?:-(\\d+(?:\\.\\d+)?))?"; String regex = "(\\d+(?:\\.\\d+)?)(?:-(\\d+(?:\\.\\d+)?))?";

@ -62,16 +62,12 @@ public interface IErpDataOemClient {
* @param v_pedate 计划完成时间 yyyy-MM-dd HH:mm:ss * @param v_pedate 计划完成时间 yyyy-MM-dd HH:mm:ss
* @param v_woporqty 下达数量 * @param v_woporqty 下达数量
* @param v_pricetype 加工类型 * @param v_pricetype 加工类型
* @param v_excnote 返回结果 OUT游标参数非必填
* @param v_excflag 返回状态 OUT游标参数非必填
* @param v_old_wono 老系统生成的外协订单号 OUT游标参数非必填
*/ */
@GetMapping(FULL_ORDER_OUTSOURCING) @GetMapping(FULL_ORDER_OUTSOURCING)
R fullOrderOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_splcode") String v_splcode, R<String> fullOrderOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_splcode") String v_splcode,
@RequestParam("v_splycode") String v_splycode, @RequestParam("v_seqcc") String v_seqcc, @RequestParam("v_sono") String v_sono, @RequestParam("v_splycode") String v_splycode, @RequestParam("v_seqcc") String v_seqcc, @RequestParam("v_sono") String v_sono,
@RequestParam("v_planner") String v_planner, @RequestParam("v_pedate") String v_pedate, @RequestParam("v_woporqty") Long v_woporqty, @RequestParam("v_planner") String v_planner, @RequestParam("v_pedate") String v_pedate, @RequestParam("v_woporqty") Double v_woporqty,
@RequestParam("v_pricetype") String v_pricetype, @RequestParam(value = "v_excnote", defaultValue = "", required = false) String v_excnote, @RequestParam(value = "v_excflag", defaultValue = "", required = false) String v_excflag, @RequestParam(value = "v_pricetype", required = false) String v_pricetype);
@RequestParam(value = "v_old_wono", defaultValue = "", required = false) String v_old_wono);
/** /**
@ -94,16 +90,12 @@ public interface IErpDataOemClient {
* @param v_roam_no B号 * @param v_roam_no B号
* @param v_craft_no C号 * @param v_craft_no C号
* @param v_craft_id 零件工艺ID * @param v_craft_id 零件工艺ID
* @param v_old_wono 老系统生成的外协订单号 OUT游标参数非必填
* @param v_excnote 返回结果 OUT游标参数非必填
* @param v_excflag 返回状态 OUT游标参数非必填
*/ */
@GetMapping(COLLABORATIVE_OUTSOURCING) @GetMapping(COLLABORATIVE_OUTSOURCING)
R collaborativeOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_woreqdat") String v_woreqdat, R<String> collaborativeOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_woreqdat") String v_woreqdat,
@RequestParam("v_woporqty") Long v_woporqty, @RequestParam(value = "v_usedeptcode", required = false) String v_usedeptcode, @RequestParam(value = "v_usedept", required = false) String v_usedept, @RequestParam("v_woporqty") Double v_woporqty, @RequestParam(value = "v_usedeptcode", required = false) String v_usedeptcode, @RequestParam(value = "v_usedept", required = false) String v_usedept,
@RequestParam("v_splcode") String v_splcode, @RequestParam("v_splycode") String v_splycode, @RequestParam("v_kdofplat") String v_kdofplat, @RequestParam("v_splcode") String v_splcode, @RequestParam("v_splycode") String v_splycode, @RequestParam("v_kdofplat") String v_kdofplat,
@RequestParam("v_wono") String v_wono, @RequestParam("v_sono") String v_sono, @RequestParam("v_mtnman") String v_mtnman, @RequestParam("v_wono") String v_wono, @RequestParam("v_sono") String v_sono, @RequestParam("v_mtnman") String v_mtnman,
@RequestParam("v_planner") String v_planner, @RequestParam("v_yardman") String v_yardman, @RequestParam("v_roam_no") String v_roam_no, @RequestParam("v_craft_no") String v_craft_no, @RequestParam("v_planner") String v_planner, @RequestParam("v_yardman") String v_yardman, @RequestParam("v_roam_no") String v_roam_no, @RequestParam("v_craft_no") String v_craft_no,
@RequestParam("v_craft_id") Long v_craft_id, @RequestParam(value = "v_old_wono", defaultValue = "", required = false) String v_old_wono, @RequestParam(value = "v_excnote", defaultValue = "", required = false) String v_excnote, @RequestParam("v_craft_id") Long v_craft_id);
@RequestParam(value = "v_excflag", defaultValue = "", required = false) String v_excflag);
} }

@ -27,12 +27,12 @@ public class IErpDataOemClientFallback implements IErpDataOemClient {
} }
@Override @Override
public R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, String v_pedate, Long v_woporqty, String v_pricetype, String v_excnote, String v_excflag, String v_old_wono) { public R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, String v_pedate, Double v_woporqty, String v_pricetype) {
return R.fail("协作外协订单接收 失败"); return R.fail("协作外协订单接收 失败");
} }
@Override @Override
public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, String v_woreqdat, Long v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id, String v_old_wono, String v_excnote, String v_excflag) { public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, String v_woreqdat, Double v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id) {
return R.fail("整单外协订单接收 失败"); return R.fail("整单外协订单接收 失败");
} }

@ -3,6 +3,8 @@ package org.springblade.erpdata.feign;
import org.springblade.common.constant.LauncherConstant; import org.springblade.common.constant.LauncherConstant;
import org.springblade.common.exception.BusinessException; import org.springblade.common.exception.BusinessException;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.erpdata.pojo.vo.MeasuringToolMaintainVO;
import org.springblade.erpdata.pojo.vo.PurchaseTrackVO;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.wms.pojo.entity.StRealtimeStock; import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
@ -32,12 +34,20 @@ public interface IErpDataWmsClient {
String SEND_ERP_BUY_REQUEST = API_PREFIX + "/sendErpBuyRequest"; String SEND_ERP_BUY_REQUEST = API_PREFIX + "/sendErpBuyRequest";
String CREATE_OR_REPLACE = API_PREFIX + "/createOrReplace";
String CREATE_MOLD_PLAN = API_PREFIX + "/createMoldPlan"; String CREATE_MOLD_PLAN = API_PREFIX + "/createMoldPlan";
String DELETE_MOLD_PLAN = API_PREFIX + "/deleteMoldPlan"; String DELETE_MOLD_PLAN = API_PREFIX + "/deleteMoldPlan";
String SEND_ERP_MAINTENANCE = API_PREFIX + "/sendErpMaintenance";
String GET_GOODS_EXT_STATUS = API_PREFIX + "/getGoodsExtStatus"; String GET_GOODS_EXT_STATUS = API_PREFIX + "/getGoodsExtStatus";
String GET_BUY_ORDER_STATUS = API_PREFIX + "/getBuyOrderStatus";
String GET_MAINTEN_STATUS = API_PREFIX + "/getMaintenStatus";
/** /**
* 到期送检发送erp * 到期送检发送erp
*/ */
@ -50,6 +60,14 @@ public interface IErpDataWmsClient {
@PostMapping(SEND_ERP_BUY_REQUEST) @PostMapping(SEND_ERP_BUY_REQUEST)
R<String> sendErpBuyRequest(@RequestParam("extraBill")String extraBill, @RequestParam("qty")Double qty, @RequestParam("ldapName")String ldapName) throws BusinessException; R<String> sendErpBuyRequest(@RequestParam("extraBill")String extraBill, @RequestParam("qty")Double qty, @RequestParam("ldapName")String ldapName) throws BusinessException;
/**
* 仓库提请修改erp
*/
@PostMapping(CREATE_OR_REPLACE)
R<String> createOrReplace(@RequestParam("extraBill")String extraBill, @RequestParam("goodsCode")String goodsCode, @RequestParam("flag")String flag,
@RequestParam("qty")Double qty, @RequestParam("amount")Double amount) throws BusinessException;
/** /**
* 工装计划申报发送erp * 工装计划申报发送erp
*/ */
@ -64,10 +82,30 @@ public interface IErpDataWmsClient {
@PostMapping(DELETE_MOLD_PLAN) @PostMapping(DELETE_MOLD_PLAN)
R<String> deleteMoldPlan(@RequestParam("erpWoCode")String erpWoCode) throws BusinessException; R<String> deleteMoldPlan(@RequestParam("erpWoCode")String erpWoCode) throws BusinessException;
/**
* 量具保养发送erp
*/
@PostMapping(SEND_ERP_MAINTENANCE)
R<String> sendErpMaintenance(@RequestParam("goodsCode")String goodsCode, @RequestParam("shCode")String shCode, @RequestParam("location")String location,
@RequestParam("needDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date needDate,
@RequestParam("flag")String flag ,@RequestParam("checkQty")Double checkQty, @RequestParam("quantityLevel")String quantityLevel) throws BusinessException;
/** /**
* 物料状态监控同步 * 物料状态监控同步
*/ */
@PostMapping(GET_GOODS_EXT_STATUS) @PostMapping(GET_GOODS_EXT_STATUS)
R<StGoodsExtStatusVO> getGoodsExtStatus(@RequestParam("goodsCode")String goodsCode); R<StGoodsExtStatusVO> getGoodsExtStatus(@RequestParam("goodsCode")String goodsCode);
/**
* 采购跟踪
*/
@PostMapping(GET_BUY_ORDER_STATUS)
R<PurchaseTrackVO> getBuyOrderStatus(@RequestParam("extraBill")String extraBill);
/**
* 量具检定
*/
@PostMapping(GET_MAINTEN_STATUS)
R<MeasuringToolMaintainVO> getMaintenStatus(@RequestParam("goodsCode")String goodsCode, @RequestParam("shCode")String shCode,
@RequestParam("location")String location, @RequestParam("createTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date createTime);
} }

@ -1,6 +1,8 @@
package org.springblade.erpdata.feign; package org.springblade.erpdata.feign;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.erpdata.pojo.vo.MeasuringToolMaintainVO;
import org.springblade.erpdata.pojo.vo.PurchaseTrackVO;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.wms.pojo.entity.StRealtimeStock; import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -30,6 +32,12 @@ public class IErpDataWmsClientFallback implements IErpDataWmsClient{
return R.fail("获取数据失败"); return R.fail("获取数据失败");
} }
@Override
public R<String> createOrReplace(@RequestParam("extraBill")String extraBill, @RequestParam("goodsCode")String goodsCode, @RequestParam("flag")String flag,
@RequestParam("qty")Double qty, @RequestParam("amount")Double amount) {
return R.fail("获取数据失败");
}
@Override @Override
public R<String> createMoldPlan(@RequestParam(value = "partCode", required = false)String partCode, @RequestParam("moCode")String moCode, @RequestParam("plantype")String plantype, @RequestParam("quantity")Double quantity, public R<String> createMoldPlan(@RequestParam(value = "partCode", required = false)String partCode, @RequestParam("moCode")String moCode, @RequestParam("plantype")String plantype, @RequestParam("quantity")Double quantity,
@RequestParam("needDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date needDate, @RequestParam("level")String level, @RequestParam("keeper")String keeper, @RequestParam("createMan")String createMan, @RequestParam("needDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date needDate, @RequestParam("level")String level, @RequestParam("keeper")String keeper, @RequestParam("createMan")String createMan,
@ -42,9 +50,27 @@ public class IErpDataWmsClientFallback implements IErpDataWmsClient{
return R.fail("获取数据失败"); return R.fail("获取数据失败");
} }
@Override
public R<String> sendErpMaintenance(@RequestParam("goodsCode")String goodsCode, @RequestParam("shCode")String shCode, @RequestParam("location")String location,
@RequestParam("needDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date needDate,
@RequestParam("flag")String flag ,@RequestParam("checkQty")Double checkQty, @RequestParam("quantityLevel")String quantityLevel) {
return R.fail("获取数据失败");
}
@Override @Override
public R<StGoodsExtStatusVO> getGoodsExtStatus(@RequestParam("goodsCode")String goodsCode) { public R<StGoodsExtStatusVO> getGoodsExtStatus(@RequestParam("goodsCode")String goodsCode) {
return R.fail("获取数据失败"); return R.fail("获取数据失败");
} }
@Override
public R<PurchaseTrackVO> getBuyOrderStatus(@RequestParam("extraBill")String extraBill) {
return R.fail("获取数据失败");
}
@Override
public R<MeasuringToolMaintainVO> getMaintenStatus(@RequestParam("goodsCode")String goodsCode, @RequestParam("shCode")String shCode,
@RequestParam("location")String location, @RequestParam("createTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date createTime) {
return R.fail("获取数据失败");
}
} }

@ -0,0 +1,26 @@
package org.springblade.erpdata.pojo.vo;
import lombok.Data;
import java.util.Date;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName MeasuringToolMaintainVO
* @description:
* @autor: WuSiYu
* @create 2026-05-26 21:24
**/
@Data
public class MeasuringToolMaintainVO {
/**
* 检定标记
*/
private String chkflag;
/**
* 检定标记检定日期
*/
private Date chkdate;
}

@ -0,0 +1,49 @@
package org.springblade.erpdata.pojo.vo;
import lombok.Data;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName PurchaseTrackVO
* @description:
* @autor: WuSiYu
* @create 2026-05-25 16:15
**/
@Data
public class PurchaseTrackVO {
/**
* 额外号
*/
private String orderno;
/**
* 负责人账号
*/
private String relctrler;
/**
* 负责人名称
*/
private String relctrlerName;
/**
* 需求状态
*/
private Short reqstat;
/**
* 采购申请单号RPNO
*/
private String rpno;
/**
* 采购人账号
*/
private String purcode;
/**
* 采购人名称
*/
private String purcodeName;
}

@ -165,6 +165,33 @@ public class StBuyOrder extends TenantEntity {
@Schema(description = "二级审批时间") @Schema(description = "二级审批时间")
private Date approvalTime2; private Date approvalTime2;
/**
* 采购部计划员ID
*/
@Schema(description = "采购部计划员ID")
private Long planBuyMan;
/**
* 采购部计划员名称
*/
@Schema(description = "采购部计划员名称")
private String planBuyManName;
/**
* 需求状态
*/
@Schema(description = "需求状态")
private Short needStatus;
/**
* erp采购单号
*/
@Schema(description = "erp采购单号")
private String erpBuyCode;
@TableField(exist = false)
private String buyManName;
@TableField(exist = false) @TableField(exist = false)
private String declareManName; private String declareManName;
@ -237,5 +264,19 @@ public class StBuyOrder extends TenantEntity {
*/ */
public static final short APPROVAL_STATUS_SECOND_UNPASS = 4; public static final short APPROVAL_STATUS_SECOND_UNPASS = 4;
/**
* 需求状态 0等候;1计划确认;2已生成定单;4未生成定单;5已做批料;6未批准;7需求取消;8车间取消;9车间批准;10车间未批
*/
public static Short NEED_STATUS_WAIT = 0; // 等候
public static Short NEED_STATUS_PLAN_CONFIRM = 1; // 计划确认
public static Short NEED_STATUS_ORDER_GENERATED = 2; // 已生成定单
public static Short NEED_STATUS_ORDER_NOT_GENERATED = 4; // 未生成定单
public static Short NEED_STATUS_BATCH_MADE = 5; // 已做批料
public static Short NEED_STATUS_NOT_APPROVED = 6; // 未批准
public static Short NEED_STATUS_REQUIRE_CANCEL = 7; // 需求取消
public static Short NEED_STATUS_WORKSHOP_CANCEL = 8; // 车间取消
public static Short NEED_STATUS_WORKSHOP_APPROVE = 9; // 车间批准
public static Short NEED_STATUS_WORKSHOP_NOT_APPROVE = 10;// 车间未批
} }

@ -0,0 +1,27 @@
package org.springblade.desk.device.feign;
import io.swagger.v3.oas.annotations.Hidden;
import jakarta.annotation.Resource;
import org.springblade.desk.device.service.IMeasuringUpkeepService;
import org.springframework.web.bind.annotation.RestController;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName ErpMeaToolTaskClientImpl
* @description:
* @autor: WuSiYu
* @create 2026-05-28 14:33
**/
@RestController
@Hidden
public class ErpMeaToolTaskClientImpl implements ErpMeaToolTaskClient {
@Resource
private IMeasuringUpkeepService measuringUpkeepService;
@Override
public void autoCheckMeasuringTool() {
measuringUpkeepService.autoCheckMeasuringTool();
}
}

@ -1,14 +1,15 @@
package org.springblade.desk.device.mapper; package org.springblade.desk.device.mapper;
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.springblade.desk.device.pojo.entity.MeasuringUpkeepEntity; import org.springblade.desk.device.pojo.entity.MeasuringUpkeepEntity;
import org.springblade.desk.device.pojo.excel.MeasuringUpkeepExcel; import org.springblade.desk.device.pojo.excel.MeasuringUpkeepExcel;
import org.springblade.desk.device.pojo.request.MeasuringUpkeepQuery; import org.springblade.desk.device.pojo.request.MeasuringUpkeepQuery;
import org.springblade.desk.device.pojo.vo.MeasuringUpkeepVO; import org.springblade.desk.device.pojo.vo.MeasuringUpkeepVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.device.pojo.vo.ToolingLibraryVO; import org.springblade.desk.device.pojo.vo.ToolingLibraryVO;
import org.springblade.wms.pojo.vo.StRealtimeStockVO;
import java.util.List; import java.util.List;
@ -46,4 +47,9 @@ public interface MeasuringUpkeepMapper extends BaseMapper<MeasuringUpkeepEntity>
*/ */
List<MeasuringUpkeepExcel> exportMeasuringUpkeep(@Param("ew") Wrapper<MeasuringUpkeepEntity> queryWrapper); List<MeasuringUpkeepExcel> exportMeasuringUpkeep(@Param("ew") Wrapper<MeasuringUpkeepEntity> queryWrapper);
StRealtimeStockVO getStockById(Long id);
void updateStock(Long id, Double checkQty);
void updateStockById(Long miId, Double checkQty);
} }

@ -92,6 +92,7 @@
<result column="quantity_level" property="quantityLevel"/> <result column="quantity_level" property="quantityLevel"/>
<result column="balance_money" property="balanceMoney"/> <result column="balance_money" property="balanceMoney"/>
<result column="sum_num" property="sumNum"/> <result column="sum_num" property="sumNum"/>
<result column="stay_maintain_num" property="stayMaintainNum"/>
</resultMap> </resultMap>
<!-- 多表联合查询SQL --> <!-- 多表联合查询SQL -->
@ -176,7 +177,7 @@
and (toolingLibrary.muStatus == null or toolingLibrary.muStatus == '') and (toolingLibrary.muStatus == null or toolingLibrary.muStatus == '')
and (toolingLibrary.goodsName == null or toolingLibrary.goodsName == '') and (toolingLibrary.goodsName == null or toolingLibrary.goodsName == '')
and (toolingLibrary.piNo == null or toolingLibrary.piNo == '')"> and (toolingLibrary.piNo == null or toolingLibrary.piNo == '')">
AND st.sum_num >= 270 AND st.stay_maintain_num >= 270
</if> </if>
<!-- 库房 --> <!-- 库房 -->
@ -210,4 +211,35 @@
FROM MES_MEASURING_UPKEEP ${ew.customSqlSegment} FROM MES_MEASURING_UPKEEP ${ew.customSqlSegment}
</select> </select>
<select id="getStockById" resultType="org.springblade.wms.pojo.vo.StRealtimeStockVO">
SELECT
s.*,
m.goods_code , -- 物料编号
w.sh_code , -- 库房编号
ws.location -- 库位号
FROM st_realtime_stock s
LEFT JOIN ST_GOODS m ON s.goods_id = m.id
LEFT JOIN ST_STOREHOUSE w ON s.sh_id = w.id
LEFT JOIN ST_STORAGE_LOCATION ws ON s.sl_id = ws.id
WHERE s.id = #{id}
AND s.is_deleted = 0
AND s.stop_use = 0
</select>
<update id="updateStock">
UPDATE st_realtime_stock
SET occupy_quantity = occupy_quantity + #{checkQty},
is_measure_maintenance = 1,
update_time = NOW()
WHERE id = #{id}
</update>
<update id="updateStockById">
UPDATE st_realtime_stock
SET STAY_MAINTAIN_NUM = 0,
is_measure_maintenance = 0,
occupy_quantity = occupy_quantity - #{checkQty},
update_time = NOW()
WHERE id = #{id}
</update>
</mapper> </mapper>

@ -58,4 +58,6 @@ public interface IMeasuringUpkeepService extends BaseService<MeasuringUpkeepEnti
* @param ids * @param ids
*/ */
R addMaintenance(List<Long> ids); R addMaintenance(List<Long> ids);
void autoCheckMeasuringTool();
} }

@ -2,9 +2,12 @@ package org.springblade.desk.device.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.common.exception.BusinessException;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
@ -16,6 +19,9 @@ import org.springblade.desk.device.pojo.request.MeasuringUpkeepQuery;
import org.springblade.desk.device.pojo.vo.MeasuringUpkeepVO; import org.springblade.desk.device.pojo.vo.MeasuringUpkeepVO;
import org.springblade.desk.device.pojo.vo.ToolingLibraryVO; import org.springblade.desk.device.pojo.vo.ToolingLibraryVO;
import org.springblade.desk.device.service.IMeasuringUpkeepService; import org.springblade.desk.device.service.IMeasuringUpkeepService;
import org.springblade.erpdata.feign.IErpDataWmsClient;
import org.springblade.erpdata.pojo.vo.MeasuringToolMaintainVO;
import org.springblade.wms.pojo.vo.StRealtimeStockVO;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -51,6 +57,9 @@ public class MeasuringUpkeepServiceImpl extends BaseServiceImpl<MeasuringUpkeepM
@Value("${request.lims.url}") @Value("${request.lims.url}")
private String limsUrl; private String limsUrl;
@Resource
IErpDataWmsClient erpDataWmsClient;
@Override @Override
public IPage<MeasuringUpkeepVO> selectMeasuringUpkeepPage(IPage<MeasuringUpkeepVO> page, MeasuringUpkeepQuery measuringUpkeep) { public IPage<MeasuringUpkeepVO> selectMeasuringUpkeepPage(IPage<MeasuringUpkeepVO> page, MeasuringUpkeepQuery measuringUpkeep) {
// return page.setRecords(baseMapper.selectMeasuringUpkeepPage(page, measuringUpkeep)); // return page.setRecords(baseMapper.selectMeasuringUpkeepPage(page, measuringUpkeep));
@ -135,15 +144,57 @@ public class MeasuringUpkeepServiceImpl extends BaseServiceImpl<MeasuringUpkeepM
ids.forEach(id -> { ids.forEach(id -> {
MeasuringUpkeepEntity entity = new MeasuringUpkeepEntity(); MeasuringUpkeepEntity entity = new MeasuringUpkeepEntity();
entity.setMiId(id); entity.setMiId(id);
entity.setStatus(MeasuringUpkeepEntity.CURSTATUS_NEW); StRealtimeStockVO stock = baseMapper.getStockById(id);
entity.setCheckFlag(0);
entity.setMmCode(nextCode(1)); entity.setMmCode(nextCode(1));
entity.setGoodsCode(stock.getGoodsCode());
entity.setShCode(stock.getShCode());
entity.setLocation(stock.getLocation());
entity.setCheckQty(stock.getQuantity());
entity.setQuantityLevel("0");
entity.setCreateMan(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1); entity.setCreateMan(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1);
list.add(entity); list.add(entity);
try {
erpDataWmsClient.sendErpMaintenance(entity.getGoodsCode(),entity.getShCode(),entity.getLocation(),
new Date(),"0",entity.getCheckQty(), "0");
} catch (BusinessException e) {
throw new RuntimeException("量具保养发送ERP失败:" + e.getMessage());
}
baseMapper.updateStock(id, entity.getCheckQty());
}); });
return R.status(this.saveBatch(list)); return R.status(this.saveBatch(list));
} }
@Override
public void autoCheckMeasuringTool() {
try {
QueryWrapper<MeasuringUpkeepEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_deleted", 0);
queryWrapper.eq("check_flag", MeasuringUpkeepEntity.CHECK_FLAG_UNCHECKED);
queryWrapper.orderByDesc("create_time");
List<MeasuringUpkeepEntity> list = baseMapper.selectList(queryWrapper);
for (MeasuringUpkeepEntity entity : list) {
MeasuringToolMaintainVO maintainVO = erpDataWmsClient.getMaintenStatus(entity.getGoodsCode(),entity.getShCode(),
entity.getLocation(),entity.getCreateTime()).getData();
entity.setCheckFlag(Integer.valueOf(maintainVO.getChkflag()));
entity.setCheckTime(maintainVO.getChkdate());
if (entity.getCheckFlag() == 1) {
baseMapper.updateStockById(entity.getMiId(), entity.getCheckQty());
}
}
log.info("===== 量具保养检验状态定时更新完成 =====", list.size());
} catch (Exception e) {
log.info("===== 量具保养检验状态定时更新异常 =====", e);
}
}
/** /**
* 构建请求体 * 构建请求体
*/ */

@ -83,12 +83,12 @@ public class OemOrderController extends BladeController {
} }
/** /**
* 协订单收回 * 协订单收回
*/ */
@PostMapping("/oemTakeBack") @PostMapping("/oemTakeBack")
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@Operation(summary = "协订单收回", description = "") @Operation(summary = "协订单收回", description = "")
@ApiLog("协订单 收回") @ApiLog("协订单 收回")
public R oemTakeBack(@Valid @RequestBody OemTakeBack oemTakeBack) { public R oemTakeBack(@Valid @RequestBody OemTakeBack oemTakeBack) {
return workOrderRunService.oemTakeBack(oemTakeBack); return workOrderRunService.oemTakeBack(oemTakeBack);
} }

@ -83,6 +83,8 @@ public class FmProjectMilestoneEntity extends BaseEntity {
*/ */
@Schema(description = "里程碑负责人") @Schema(description = "里程碑负责人")
private String milestoneMan; private String milestoneMan;
@Schema(description = "里程碑负责人ID ")
private String milestoneManId;
/** /**
* 里程碑输出物 * 里程碑输出物
*/ */
@ -148,6 +150,9 @@ public class FmProjectMilestoneEntity extends BaseEntity {
*/ */
@Schema(description = "核查人") @Schema(description = "核查人")
private String checkMan; private String checkMan;
@Schema(description = "核查人ID")
private String checkManId;
/** /**
* 核查时间 * 核查时间
*/ */

@ -208,11 +208,11 @@ public class FmProjectApplicationServiceImpl extends BaseServiceImpl<FmProjectAp
throw new RuntimeException("项目信息不存在"); throw new RuntimeException("项目信息不存在");
} }
FmProjectApplicationEntity entity = getById(fmProjectApplication.getId()); FmProjectApplicationEntity entity = getById(fmProjectApplication.getId());
if (Objects.isNull(entity) || //if (Objects.isNull(entity) ||
!FmProjectApplicationEntity.ApprovalStatusEnum.STATUS_DRAFT.getCode().equals(entity.getApprovalStatus()) || // !FmProjectApplicationEntity.ApprovalStatusEnum.STATUS_DRAFT.getCode().equals(entity.getApprovalStatus()) ||
!FmProjectApplicationEntity.ApprovalStatusEnum.STATUS_REJECTED.getCode().equals(entity.getApprovalStatus()) ) { // !FmProjectApplicationEntity.ApprovalStatusEnum.STATUS_REJECTED.getCode().equals(entity.getApprovalStatus()) ) {
throw new RuntimeException("项目信息状态异常"); // throw new RuntimeException("项目信息状态异常");
} //}
List<FmProjectMilestoneEntity> stoneList = fmProjectApplication.getStoneList(); List<FmProjectMilestoneEntity> stoneList = fmProjectApplication.getStoneList();
if(CollectionUtils.isNotEmpty(stoneList)){ if(CollectionUtils.isNotEmpty(stoneList)){

@ -101,19 +101,19 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
@Override @Override
public boolean sendCheck(FmProjectMilestoneEntity fmProjectMilestone) { public boolean sendCheck(FmProjectMilestoneEntity fmProjectMilestone) {
if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) { if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) {
throw new ServiceException("参数错误"); throw new RuntimeException("参数错误");
} }
// TODO: 2026/5/27 是否手动更新 // TODO: 2026/5/27 是否手动更新
FmProjectMilestoneEntity entity = getById(fmProjectMilestone.getId()); FmProjectMilestoneEntity entity = getById(fmProjectMilestone.getId());
if (BeanUtil.isEmpty(entity)) { if (BeanUtil.isEmpty(entity)) {
throw new ServiceException("里程碑信息获取失败"); throw new RuntimeException("里程碑信息获取失败");
} }
if (Objects.isNull(fmProjectMilestone.getCheckResult())) { if (Objects.isNull(fmProjectMilestone.getCheckResult())) {
throw new ServiceException("请选择核查结果"); throw new RuntimeException("请选择核查结果");
} }
if (!FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult()) || if (!FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult()) &&
!FmProjectMilestoneEntity.CHECK_RESULT_NO.equals(fmProjectMilestone.getCheckResult())) { !FmProjectMilestoneEntity.CHECK_RESULT_NO.equals(fmProjectMilestone.getCheckResult())) {
throw new ServiceException("请选择核查结果"); throw new RuntimeException("请选择核查结果");
} }
@ -121,7 +121,12 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
if (!entity.getNextApproverId().equals(AuthUtil.getUserId())) { if (!entity.getNextApproverId().equals(AuthUtil.getUserId())) {
throw new ServiceException("您不是当前里程碑的核查人"); throw new ServiceException("您不是当前里程碑的核查人");
} }
fmProjectMilestone.setCheckMan(entity.getNextApproverId().toString()); R<User> userR1 = userClient.userInfoById(entity.getNextApproverId());
if (!userR1.isSuccess() || BeanUtil.isEmpty(userR1.getData())) {
throw new RuntimeException("当前里程碑的核查人不存在");
}
fmProjectMilestone.setCheckMan(userR1.getData().getRealName());
fmProjectMilestone.setCheckManId(entity.getNextApproverId().toString());
// 如果核查通过,需要流转到核准节点 // 如果核查通过,需要流转到核准节点
if (FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult())) { if (FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult())) {
@ -248,7 +253,7 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean projectExecute(FmProjectMilestoneEntity fmProjectMilestone) { public boolean projectExecute(FmProjectMilestoneEntity fmProjectMilestone) {
check(fmProjectMilestone); FmProjectMilestoneEntity entity = check(fmProjectMilestone);
// 如果执行类型不是终止,需要选择下一节点审批人 // 如果执行类型不是终止,需要选择下一节点审批人
if (!FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ.equals(fmProjectMilestone.getExecuteType())) { if (!FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ.equals(fmProjectMilestone.getExecuteType())) {
@ -264,7 +269,6 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
} }
} }
FmProjectMilestoneEntity entity = getById(fmProjectMilestone.getId());
entity.setNextApproverId(fmProjectMilestone.getNextApproverId()); entity.setNextApproverId(fmProjectMilestone.getNextApproverId());
entity.setNextApproverName(fmProjectMilestone.getNextApproverName()); entity.setNextApproverName(fmProjectMilestone.getNextApproverName());
entity.setPaIndex(fmProjectMilestone.getPaIndex()); entity.setPaIndex(fmProjectMilestone.getPaIndex());
@ -332,12 +336,12 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
log.error("发送里程碑计划审批提醒异常,里程碑计划: {}", fmProjectMilestone.getMilestonePlan(), e); log.error("发送里程碑计划审批提醒异常,里程碑计划: {}", fmProjectMilestone.getMilestonePlan(), e);
} }
} }
private void check(FmProjectMilestoneEntity fmProjectMilestone) { private FmProjectMilestoneEntity check(FmProjectMilestoneEntity fmProjectMilestone) {
if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) { if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) {
throw new RuntimeException("参数异常"); throw new RuntimeException("参数异常");
} }
if (StrUtil.isNotEmpty(fmProjectMilestone.getExecuteType())) { if (StrUtil.isEmpty(fmProjectMilestone.getExecuteType())) {
throw new RuntimeException("请选择执行类型"); throw new RuntimeException("请选择执行类型");
} }
// 剔除`无`选项 // 剔除`无`选项
@ -360,14 +364,19 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
if (BeanUtil.isEmpty(fmProjectApplication) || Objects.isNull(fmProjectApplication.getId())) { if (BeanUtil.isEmpty(fmProjectApplication) || Objects.isNull(fmProjectApplication.getId())) {
throw new RuntimeException("参数异常"); throw new RuntimeException("参数异常");
} }
FmProjectApplicationEntity applicationEntity = fmProjectApplicationService.getById(fmProjectApplication.getId()); FmProjectApplicationEntity applicationEntity = fmProjectApplicationService.getById(fmProjectApplication.getId());
if (BeanUtil.isEmpty(applicationEntity)) { if (BeanUtil.isEmpty(applicationEntity)) {
throw new RuntimeException("参数异常"); throw new RuntimeException("参数异常");
} }
FmProjectMilestoneEntity byId = getById(fmProjectMilestone.getId());
Long userId = AuthUtil.getUserId(); Long userId = AuthUtil.getUserId();
if (!userId.toString().equals(applicationEntity.getProjectHeadId())) { if (!userId.toString().equals(fmProjectMilestone.getMilestoneManId())) {
throw new RuntimeException("非项目负责人没有执行权限"); throw new RuntimeException("非里程碑负责人没有执行权限");
} }
return byId;
} }
@Override @Override

@ -12,6 +12,7 @@ import org.springblade.desk.oem.pojo.vo.OemOrderVO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun; import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 车间订单运行记录表 Mapper 接口 * 车间订单运行记录表 Mapper 接口
@ -47,4 +48,7 @@ public interface WorkOrderRunMapper extends BaseMapper<WorkOrderRun> {
*/ */
List<OemApprovalVO> selectOemApproval(IPage page, @Param("query") OemApprovalQuery query); List<OemApprovalVO> selectOemApproval(IPage page, @Param("query") OemApprovalQuery query);
Map<String, String> selectRoamAndCraftNoByCraftId(Long craftId);
Map<String, String> selectRoamAndCraftNoByPartCode(String partCode);
} }

@ -389,4 +389,10 @@
</foreach> </foreach>
</if> </if>
</select> </select>
<select id="selectRoamAndCraftNoByCraftId" resultType="java.util.Map">
SELECT MAX(a.roam_no) AS roamNo, MAX(a.craft_no) AS craftNo FROM ds_craft a WHERE a.id = #{craftId}
</select>
<select id="selectRoamAndCraftNoByPartCode" resultType="java.util.Map">
SELECT MAX(a.roam_no) AS roamNo, MAX(a.craft_no) AS craftNo FROM ds_craft a, ds_part b WHERE a.part_id = b.id AND b.part_code = #{partCode}
</select>
</mapper> </mapper>

@ -294,16 +294,32 @@
<select id="getByRfpsId" resultType="org.springblade.desk.produce.pojo.dto.MesRbFilePreserveDetailDTO"> <select id="getByRfpsId" resultType="org.springblade.desk.produce.pojo.dto.MesRbFilePreserveDetailDTO">
select * ,slot.rfps_type as rfpsType from MES_RB_FILE_PRESERVE_DETAIL a select DISTINCT
a.RFPS_ID as rfpsId,
a.DETAIL_NAME as detailName,
a.DETAIL_INDEX as detailIndex,
a.ASK,
a.RFPD_TIME as rfpdTime,
a.QUALIFIED,
a.PARAM_NAME as paramName,
a.PARAM_VALUE as paramValue,
slot.rfps_type as rfpsType
from MES_RB_FILE_PRESERVE_DETAIL a
inner join MES_RB_FILE_PRESERVE_SLOT slot on a.rfps_id = slot.rfp_id inner join MES_RB_FILE_PRESERVE_SLOT slot on a.rfps_id = slot.rfp_id
where slot.rfp_id =#{rfpsId} where slot.rfp_id =#{rfpsId}
order by a.DETAIL_INDEX asc
</select> </select>
<select id="getByRfpId" resultType="org.springblade.desk.produce.pojo.entity.MesRbFilePreserveSlotEntity"> <select id="getByRfpId" resultType="org.springblade.desk.produce.pojo.entity.MesRbFilePreserveSlotEntity">
select a.* from MES_RB_FILE_PRESERVE_SLOT slot select slot.RFP_ID as rfpId,
-- left join DS_RB_FILE_PRESERVE slot on a.Id = slot.RFP_ID slot.SLOT_NAME as slotName,
slot.SLOT_INDEX as slotIndex,
slot.INSERT_INDEX as insertIndex,
slot.RFPS_TYPE as rfpsType,
slot.KEEP_TIME as keepTime,
slot.KEEP_MAN as keepMan
from MES_RB_FILE_PRESERVE_SLOT slot
inner join QA_PRO_RE_TEMPLATE a on a.Id = slot.RFP_ID inner join QA_PRO_RE_TEMPLATE a on a.Id = slot.RFP_ID
where slot.RFP_ID =#{rfpId} where slot.RFP_ID =#{rfpId}

@ -1,5 +1,6 @@
package org.springblade.desk.produce.service.impl; package org.springblade.desk.produce.service.impl;
import com.alibaba.excel.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -134,6 +135,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
if (null == workOrderRun) { if (null == workOrderRun) {
return R.fail("未找到相关外协订单"); return R.fail("未找到相关外协订单");
} }
// 必须是"已下达"状态才能收回
if (!WorkOrderRun.RUN_STATUS_ISSUED.equals(workOrderRun.getRunStatus())) {
return R.fail("外协订单已收回或状态不正确,无法再次操作");
}
// 获取订单信息 // 获取订单信息
WorkOrder workOrder = workOrderMapper.selectById(workOrderRun.getWoId()); WorkOrder workOrder = workOrderMapper.selectById(workOrderRun.getWoId());
if (workOrder == null) { if (workOrder == null) {
@ -333,8 +338,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前 //如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前
if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) { if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>().eq(WorkPlan::getId, wp.getNextWpId()));
.eq(WorkPlan::getId, wp.getNextWpId()));
workOrderRun.setInCustomer(nextWp.getOcId()); workOrderRun.setInCustomer(nextWp.getOcId());
} else { } else {
workOrderRun.setInCustomer(wp.getOcId()); workOrderRun.setInCustomer(wp.getOcId());
@ -342,6 +346,52 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//更新车间订单主责任单位 //更新车间订单主责任单位
workOrderService.updateHostWorkUnit(wo); workOrderService.updateHostWorkUnit(wo);
workPlanMapper.updateById(wpList); workPlanMapper.updateById(wpList);
// 调用外协接收
String wxWoCode = null;
Oem oem = oemMapper.selectById(workOrderRun.getInCustomer());
User planner = UserCache.getUser(wo.getPlanner());
if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) {
List<BsProcessSetEntity> processSets = processSetMapper.selectByIds(wpList.stream().filter(workPlan -> oem.getId().equals(workPlan.getOcId())).map(WorkPlan::getPpsId).collect(Collectors.toList()));
String ppsName = processSets.stream().map(BsProcessSetEntity::getName).collect(Collectors.joining(","));
// 获取wpList最大的计划结束时间
LocalDateTime maxPlanEndTime = wpList.stream().map(WorkPlan::getPlanEndTime).max(LocalDateTime::compareTo).orElse(null);
if (maxPlanEndTime == null) {
maxPlanEndTime = LocalDateTime.now();
}
wxWoCode = erpDataOemClient.fullOrderOutsourcing(yo.getPartCode(), yo.getProductIdent(), wo.getBatchNo(), oem != null ? oem.getCode() : "", ppsName, yo.getYoCode(),
planner != null ? planner.getName() : "", maxPlanEndTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), wo.getMakeQty(), "").getData();
} else {
User user = UserCache.getUser(workOrderRun.getCreateUser());
User dispatcher = UserCache.getUser(wo.getDispatcher());
String roamNo = null;
String craftNo = null;
Long craftId = yo.getCraftId();
// 返工单号
if (craftId != null && wo.getReworkCode() == null) {
Map<String, String> craftInfo = baseMapper.selectRoamAndCraftNoByCraftId(craftId);
roamNo = craftInfo.get("roamNo");
craftNo = craftInfo.get("craftNo");
if (roamNo == null) {
craftInfo = baseMapper.selectRoamAndCraftNoByPartCode(yo.getPartCode());
roamNo = craftInfo.get("roamNo");
craftNo = craftInfo.get("craftNo");
}
} else if (StringUtils.isNotBlank(wo.getReworkCode())) {
roamNo = wo.getReworkCode();
craftNo = "返修";
craftId = Long.valueOf(wo.getReworkNo());
}
String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()).format(yo.getDemandDate().toInstant());
wxWoCode = erpDataOemClient.collaborativeOutsourcing(yo.getPartCode(), yo.getProductIdent(), format, wo.getMakeQty(), yo.getUseDeptCode(), yo.getUseDept(),
wo.getBatchNo(), oem != null ? oem.getCode() : "", yo.getPlate(), yo.getYpCode(), yo.getYoCode(), user != null ? user.getName() : "",
planner != null ? planner.getName() : "", dispatcher != null ? dispatcher.getName() : "", roamNo, craftNo, craftId).getData();
}
// 赋值wx号,erp返回
workOrderRun.setWoCode(wxWoCode);
if (StringUtils.isNotBlank(wxWoCode)) {
updateWorkPlanAndOrderStatus(wo, wxWoCode);
}
} else { } else {
//转厂内业务 //转厂内业务
WorkPlan nextWorkPlan; WorkPlan nextWorkPlan;
@ -473,6 +523,44 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return R.success("操作完成"); return R.success("操作完成");
} }
private void updateWorkPlanAndOrderStatus(WorkOrder workOrder, String wxCode) {
WorkPlan workPlan = workPlanMapper.selectById(workOrder.getWpId());
Date date = new Date();
if (workPlan.getStatus() == 3) {
// 更新下一道工序
if (workPlan.getNextWpId() != null) {
WorkPlan nextPlan = new WorkPlan();
nextPlan.setId(workPlan.getNextWpId());
nextPlan.setFactStartTime(date);
nextPlan.setStatus(WorkPlan.STATUS_START);
nextPlan.setWxNo(wxCode);
workPlanMapper.updateById(nextPlan);
}
// 更新当前工序为完成
WorkPlan currentPlan = new WorkPlan();
currentPlan.setId(workPlan.getId());
currentPlan.setFactEndTime(date);
currentPlan.setStatus(5);
currentPlan.setWxNo(wxCode);
workPlanMapper.updateById(currentPlan);
// 更新订单当前工序
workOrder.setWpId(workPlan.getNextWpId());
} else {
// 更新当前工序为进行中
WorkPlan currentPlan = new WorkPlan();
currentPlan.setId(workPlan.getId());
currentPlan.setFactStartTime(date);
currentPlan.setStatus(2);
currentPlan.setWxNo(wxCode);
workPlanMapper.updateById(currentPlan);
}
workOrder.setOemOut(String.valueOf(1));
workOrder.setPickingStatus(1);
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public R changeOemManufacturer(Long worId, Long ocId) { public R changeOemManufacturer(Long worId, Long ocId) {
@ -551,11 +639,23 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return page.setRecords(approvals); return page.setRecords(approvals);
} }
/**
* 查找可交件的最后一道外协工序
* 取第一个非外协未开工序的 front_wp_id
*/
private WorkPlan findDeliverableWorkPlan(List<WorkPlan> workPlans) { private WorkPlan findDeliverableWorkPlan(List<WorkPlan> workPlans) {
return workPlans.stream() WorkPlan firstInternalPlan = workPlans.stream()
.filter(plan -> "0".equals(plan.getOem()) && plan.getStatus() == 1) .filter(plan -> "0".equals(plan.getOem()) && plan.getStatus() == 1)
.min(Comparator.comparing(WorkPlan::getOrders)) .min(Comparator.comparing(WorkPlan::getOrders))
.orElse(null); .orElse(null);
if (firstInternalPlan == null) {
return null;
}
Long frontWpId = firstInternalPlan.getFrontWpId();
return workPlans.stream()
.filter(plan -> plan.getId().equals(frontWpId))
.findFirst()
.orElse(null);
} }
private void executeBusinessLogic(YieldOrder yieldOrder, WorkOrder workOrder, WorkOrderRun workOrderRun, private void executeBusinessLogic(YieldOrder yieldOrder, WorkOrder workOrder, WorkOrderRun workOrderRun,
@ -593,6 +693,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
*/ */
private void updateWorkOrder(WorkOrder workOrder, WorkPlan deliverablePlan, private void updateWorkOrder(WorkOrder workOrder, WorkPlan deliverablePlan,
Integer scrapQty, Integer testQty) { Integer scrapQty, Integer testQty) {
// 已交接的订单不允许再修改
if (WorkOrder.RUN_STATUS_CRAFT_CHANGE.equals(workOrder.getRunStatus())) {
throw new ServiceException("车间订单已交接,无法再次收回");
}
workOrder.setWpId(deliverablePlan.getId()); workOrder.setWpId(deliverablePlan.getId());
workOrder.setRunStatus(3); // 加工中 workOrder.setRunStatus(3); // 加工中
workOrder.setMakeQty(workOrder.getMakeQty() - scrapQty - testQty); workOrder.setMakeQty(workOrder.getMakeQty() - scrapQty - testQty);

@ -36,6 +36,7 @@ import org.springblade.desk.basic.util.IdUtil;
import org.springblade.desk.basic.util.StatusCountMap; import org.springblade.desk.basic.util.StatusCountMap;
import org.springblade.desk.dashboard.pojo.entity.*; import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.service.IBsProcessSetService; import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.dashboard.service.IBsTeamSetService;
import org.springblade.desk.dashboard.service.IDsPartService; import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.dashboard.service.IDsPartVersionService; import org.springblade.desk.dashboard.service.IDsPartVersionService;
import org.springblade.desk.device.pojo.entity.EquipmentEntity; import org.springblade.desk.device.pojo.entity.EquipmentEntity;
@ -52,6 +53,7 @@ import org.springblade.desk.produce.mapper.WorkPlanMapper;
import org.springblade.desk.produce.pojo.dto.*; import org.springblade.desk.produce.pojo.dto.*;
import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.vo.MakeRecExpandVO; import org.springblade.desk.produce.pojo.vo.MakeRecExpandVO;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorFileSlotVO;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO; import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO;
import org.springblade.desk.produce.pojo.vo.WorkPlanExpandVO; import org.springblade.desk.produce.pojo.vo.WorkPlanExpandVO;
import org.springblade.desk.produce.service.*; import org.springblade.desk.produce.service.*;
@ -68,7 +70,6 @@ import org.springblade.desk.quality.pojo.vo.*;
import org.springblade.desk.quality.service.*; import org.springblade.desk.quality.service.*;
import org.springblade.desk.quality.wrapper.InspectionTaskListWrapper; import org.springblade.desk.quality.wrapper.InspectionTaskListWrapper;
import org.springblade.erpdata.feign.IErpDataCheckerSealClient; import org.springblade.erpdata.feign.IErpDataCheckerSealClient;
import org.springblade.scheduling.pojo.entity.WorkPlanEntity;
import org.springblade.system.feign.IDictClient; import org.springblade.system.feign.IDictClient;
import org.springblade.system.feign.IUserClient; import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
@ -161,6 +162,14 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
private IWorkPlanItemDetailService workPlanItemDetailService; private IWorkPlanItemDetailService workPlanItemDetailService;
@Resource @Resource
private final IErpDataCheckerSealClient erpDataCheckerSealClient; private final IErpDataCheckerSealClient erpDataCheckerSealClient;
@Resource
private final IBsTeamSetService bsTeamSetService;
@Resource
private final IMacToolUseService macToolUseService;
@Resource
private final IMesQcProduceRunService qcProduceRunService;
@Resource
private final IBsProcessSetService bsProcessSetService;
@Override @Override
@ -716,16 +725,16 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
partJson.put("cruxMemo", dsPart.getKeyInfo()); partJson.put("cruxMemo", dsPart.getKeyInfo());
partJson.put("memo", dsPart.getRemarks()); partJson.put("memo", dsPart.getRemarks());
partJson.put("area", dsPart.getArea()); partJson.put("area", dsPart.getArea());
if(dsPart.getArea() != null){ if (dsPart.getArea() != null) {
partJson.put("area", roundToSixDecimalPlaces(dsPart.getArea())); partJson.put("area", roundToSixDecimalPlaces(dsPart.getArea()));
} }
} }
if (yo != null) { if (yo != null) {
yoJson.put("productType", yo.getProductType()); yoJson.put("productType", yo.getProductType());
yoJson.put("prodIdent", yo.getProductIdent()); yoJson.put("prodIdent", yo.getProductIdent());
yoJson.put("poQty", yo.getYpQty()); yoJson.put("poQty", wo.getMakeQty());
yoJson.put("poArea", yo.getYpArea()); yoJson.put("poArea", yo.getYpArea());
if(yo.getYpArea() != null){ if (yo.getYpArea() != null) {
yoJson.put("poArea", roundToSixDecimalPlaces(yo.getYpArea())); yoJson.put("poArea", roundToSixDecimalPlaces(yo.getYpArea()));
} }
yoJson.put("primaryCraft", yo.getPrimaryCraft()); yoJson.put("primaryCraft", yo.getPrimaryCraft());
@ -741,6 +750,7 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
/** /**
* double保留6为小数四舍五入 * double保留6为小数四舍五入
*
* @param num * @param num
* @return * @return
*/ */
@ -783,19 +793,10 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
modelTwo.put("procedureSet", procedureSet); modelTwo.put("procedureSet", procedureSet);
modelTwo.put("slotList", slotList); modelTwo.put("slotList", slotList);
modelTwo.put("tankInfo", tankInfo); modelTwo.put("tankInfo", tankInfo);
List<MesRbFilePreserveSlotEntity> dsRbFilePreserveSlotList = new ArrayList<>(); List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList = new ArrayList<>();
if (WorkPlan.PRINT_TYPE_PROCESS.equals(prWorkPlan.getPrintType())) { if (WorkPlan.PRINT_TYPE_PROCESS.equals(prWorkPlan.getPrintType())) {
// 同槽信息(从设备,工装使用记录获取) // 同槽信息(从设备,工装使用记录获取)
List<ProduceMonitorSlotListVO> slotVOList = null; List<ProduceMonitorSlotListVO> slotVOList = macToolUseService.listSlotInfo(prWorkPlan);
//zxh 20250626 增加固溶工序同炉数据
if ("固溶".equals(prWorkPlan.getPpsName())) {
slotVOList = workPlanMapper.listSlotInfoGr(prWorkPlan.getId(), Boolean.FALSE);
} else {
slotVOList = workPlanMapper.listSlotInfoList(prWorkPlan.getId(), Boolean.TRUE);
if (slotVOList == null || slotVOList.size() == 0) {
slotVOList = workPlanMapper.listSlotInfoList(prWorkPlan.getId(), Boolean.FALSE);
}
}
if (CollectionUtils.isNotEmpty(slotVOList)) { if (CollectionUtils.isNotEmpty(slotVOList)) {
for (ProduceMonitorSlotListVO slot : slotVOList) { for (ProduceMonitorSlotListVO slot : slotVOList) {
JSONObject slotJson = new JSONObject(); JSONObject slotJson = new JSONObject();
@ -902,107 +903,87 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
* @param workPlan * @param workPlan
* @return * @return
*/ */
private List<MesRbFilePreserveSlotEntity> buildDsRbFilePreserveSlotList(WorkPlanExpandVO workPlan) { private List<ProduceMonitorFileSlotVO> buildDsRbFilePreserveSlotList(WorkPlanExpandVO workPlan) {
List<MesRbFilePreserveSlotEntity> dsRbFilePreserveSlotList = new ArrayList<>(); List<MesQcProduceRunEntity> qcProduceRunsList;
QueryWrapper<CenterTeam> qwteam = new QueryWrapper<>(); List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList = new ArrayList<>();
qwteam.eq("TS_ID", workPlan.getMakeTeam()); BsTeamSetEntity bsTeamSet = bsTeamSetService.getById(workPlan.getMakeTeam());
List<CenterTeam> teamList = centerTeamService.list(qwteam); if (bsTeamSet != null) {
CenterTeam bsCenterTeam = null;
if (teamList != null && teamList.size() > 0) {
bsCenterTeam = teamList.get(0);
}
if (bsCenterTeam != null && bsCenterTeam.getWcId() != null) {
MacToolUse prMacToolUse; MacToolUse prMacToolUse;
List<MesRbFilePreserveSlotEntity> preserveSlotList; List<MesRbFilePreserveSlotEntity> preserveSlotList;
List<MesQcProduceRunEntity> qcProduceRunsList; MesQcProduceRunEntity boxInfo;
MesQcProduceRunEntity boxInfo = new MesQcProduceRunEntity();
// 根据电子档案维护组装数据(上线前) 分槽 // 根据电子档案维护组装数据(上线前) 分槽
List<MacToolUse> dataByWpIdAndIndexList = workPlanMapper.getDataByWpIdAndIndexList(workPlan.getId(), "1"); List<MacToolUse> dataByWpIdAndIndexList = macToolUseService.getDataByWpIdAndIndexList(workPlan.getId(), "1");
if (dataByWpIdAndIndexList != null && dataByWpIdAndIndexList.size() > 0) { if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(dataByWpIdAndIndexList)) {
for (MacToolUse prMacToolUseItem : dataByWpIdAndIndexList) { for (MacToolUse prMacToolUseItem : dataByWpIdAndIndexList) {
if (prMacToolUseItem != null && prMacToolUseItem.getId() != null) { if (prMacToolUseItem != null && prMacToolUseItem.getId() != null) {
// 获取模板数据 // 获取模板数据
preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(prMacToolUseItem.getRfpId())); preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(prMacToolUseItem.getRfpId()));
qcProduceRunsList = workPlanMapper.listPrByWpIdIndexAndMtnCode(workPlan.getId(), 1, prMacToolUseItem.getMtnCode()); qcProduceRunsList = qcProduceRunService.listPrByWpIdIndexAndMtnCode(dataByWpIdAndIndexList.stream().map(MacToolUse::getMtnCode).toList(), prMacToolUseItem.getMtnCode());
// 烘箱信息(从设备,工装使用记录获取) // 烘箱信息(从设备,工装使用记录获取)
List<MesQcProduceRunEntity> runs = workPlanMapper.getBoxInfoByWpIdMtnCodeList(workPlan.getId()); boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId());
if (runs != null && runs.size() > 0) { if (boxInfo.getInDate() != null) {
boxInfo = runs.get(0);
}
if (StringUtils.isNotBlank(boxInfo.getInDate())) {
qcProduceRunsList.add(boxInfo); qcProduceRunsList.add(boxInfo);
} }
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) {
// 2025-07-23 线上迁移修改删除了日志打印 // 2025-07-23 线上迁移修改删除了日志打印
// cdl 20250218 修改分槽同一槽号连续出现 // cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan, this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUseItem);
dsRbFilePreserveSlotList, prMacToolUseItem);
} }
} }
} }
} }
// 根据电子档案维护组装数据(自动) // 根据电子档案维护组装数据(自动)
prMacToolUse = workPlanMapper.getDataByWpIdAndIndex(workPlan.getId(), "2"); prMacToolUse = macToolUseService.getDataByWpIdAndIndex(workPlan.getId(), "2");
if (prMacToolUse != null && prMacToolUse.getId() != null) { if (prMacToolUse != null && prMacToolUse.getId() != null) {
// 获取模板数据
List<ProReTemplate> dsRbFilePreserveList = null; List<ProReTemplate> dsRbFilePreserveList;
if (workPlan.getPpsId() != null) { BsProcessSetEntity processSet = bsProcessSetService.getById(workPlan.getPpsId());
BsProcessSetEntity process = processSetService.getById(workPlan.getPpsId()); if (workPlan.getPpsId() != null && ("喷砂".equals(processSet.getName()) || "涂色标".equals(processSet.getName()))) {
if ("喷砂".equals(process.getName()) || "涂色标".equals(process.getName())) { dsRbFilePreserveList = proReTemplateService.getDataByWcIdAndPpsId(null, workPlan.getPpsId(), Boolean.TRUE);
dsRbFilePreserveList = workPlanMapper.getDataByWcIdAndPpsId(null,
workPlan.getPpsId(), "0");
} else { } else {
dsRbFilePreserveList = workPlanMapper.getDataByWcIdAndPpsId(bsCenterTeam.getWcId(), dsRbFilePreserveList = proReTemplateService.getDataByWcIdAndPpsId(bsTeamSet.getWcId(), workPlan.getPpsId(), Boolean.TRUE);
workPlan.getPpsId(), "0");
}
} }
if (dsRbFilePreserveList != null && !dsRbFilePreserveList.isEmpty()) {
preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(dsRbFilePreserveList.get(0).getId());
qcProduceRunsList = qcProduceRunService.listPrByWpIdIndex(workPlan.getId(), 2, Boolean.TRUE);
//sql不对
if (dsRbFilePreserveList != null && dsRbFilePreserveList.size() > 0) {
//00000000000000
preserveSlotList = workPlanMapper.getByRfpId(dsRbFilePreserveList.get(0).getId());
qcProduceRunsList = workPlanMapper.listPrByWpIdIndex(workPlan.getId(), 2, Boolean.TRUE);
List<MesQcProduceRunEntity> runs = workPlanMapper.getBoxInfoByWpIdMtnCodeList(workPlan.getId());
if (runs != null && runs.size() > 0) {
boxInfo = runs.get(0);
}
// 烘箱信息(从设备,工装使用记录获取) // 烘箱信息(从设备,工装使用记录获取)
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0 && StringUtils.isNotBlank(boxInfo.getInDate())) { boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId());
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty() && boxInfo.getInDate() != null) {
qcProduceRunsList.add(boxInfo); qcProduceRunsList.add(boxInfo);
} }
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) { if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
// cdl 20250218 修改分槽同一槽号连续出现 // cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan, this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUse);
dsRbFilePreserveSlotList, prMacToolUse);
} }
} }
// 获取额外面积数据
// BsAdditionalMess dataByMtuCode = bsAdditionalMessDao.getDataByOneData(prMacToolUse.getMtnCode(), BsAdditionalMess.TYPE_ONE);
// workPlan.setBsAdditionalMess(dataByMtuCode);
} }
// 根据电子档案维护组装数据(线下)
//zxh 20250117 解决单工序绑定两个手动记录只显示一个问题 //zxh 20250117 解决单工序绑定两个手动记录只显示一个问题
List<MacToolUse> prMacToolUseList = workPlanMapper.getDataByWpIdAndIndexList(workPlan.getId(), "3"); List<MacToolUse> prMacToolUseList = macToolUseService.getDataByWpIdAndIndexList(workPlan.getId(), "3");
if (prMacToolUseList != null && prMacToolUseList.size() > 0) { if (prMacToolUseList != null && !prMacToolUseList.isEmpty()) {
for (MacToolUse prMacToolUseSd : prMacToolUseList) { for (MacToolUse prMacToolUseSd : prMacToolUseList) {
if (prMacToolUseSd != null && prMacToolUseSd.getId() != null) { if (prMacToolUseSd != null && prMacToolUseSd.getId() != null) {
// 获取模板数据 // 获取模板数据
preserveSlotList = workPlanMapper.getByRfpId(Long.valueOf(prMacToolUseSd.getRfpId())); preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(prMacToolUseSd.getRfpId()));
qcProduceRunsList = workPlanMapper.listPrByWpIdIndexAndMtnCode(workPlan.getId(), 3, prMacToolUseSd.getMtnCode()); qcProduceRunsList = qcProduceRunService.listPrByWpIdIndexAndMtnCode(prMacToolUseList.stream().map(MacToolUse::getMtnCode).toList(), prMacToolUseSd.getMtnCode());
// 烘箱信息(从设备,工装使用记录获取) // 烘箱信息(从设备,工装使用记录获取)
List<MesQcProduceRunEntity> runs = workPlanMapper.getBoxInfoByWpIdMtnCodeList(workPlan.getId()); boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId());
if (runs != null && runs.size() > 0) { if (boxInfo.getInDate() != null) {
boxInfo = runs.get(0);
}
if (StringUtils.isNotBlank(boxInfo.getInDate())) {
qcProduceRunsList.add(boxInfo); qcProduceRunsList.add(boxInfo);
} }
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) { if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
// cdl 20250218 修改分槽同一槽号连续出现 // cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan, this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUseSd);
dsRbFilePreserveSlotList, prMacToolUseSd);
} }
} }
} }
@ -1011,6 +992,381 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
return dsRbFilePreserveSlotList; return dsRbFilePreserveSlotList;
} }
private void setRbFilePreserveDateNew(List<MesRbFilePreserveSlotEntity> preserveSlotList, List<MesQcProduceRunEntity> qcProduceRunsList, WorkPlan workPlan, List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList, MacToolUse prMacToolUse) {
List<MesRbFilePreserveDetailEntity> dsRbFilePreserveDetailList = null;
ProduceMonitorFileSlotVO newDsRbFilePreserveSlot = null;
MesRbFilePreserveDetailEntity newDsRbFilePreserveDetail = null;
Map<String, MesRbFilePreserveSlotEntity> preserveSlotMap = preserveSlotList.stream().collect(Collectors.toMap(MesRbFilePreserveSlotEntity::getSlotName, java.util.function.Function.identity()));
List<ProduceMonitorFileSlotVO> temporaryList = new ArrayList<>();
for (MesQcProduceRunEntity qcProduceRun : qcProduceRunsList) {
// 根据维护的电子档案的槽号找寻对应生产追溯的的数据
if (StringUtils.isBlank(qcProduceRun.getWorkSlot())) {
continue;
}
MesRbFilePreserveSlotEntity dsRbFilePreserveSlot = preserveSlotMap.get(qcProduceRun.getWorkSlot().trim());
if ("水膜连续性检查".equals(qcProduceRun.getWorkSlot().trim())) {
qcProduceRun.setQualified("1");
}
// cdl 20250218 修改分槽同一槽号连续出现
this.setTemplateData(dsRbFilePreserveSlot, qcProduceRun, newDsRbFilePreserveSlot, dsRbFilePreserveDetailList, newDsRbFilePreserveDetail, workPlan, temporaryList, prMacToolUse);
}
// 判断是不是自动线并且有水墨连续性
MacToolUse macToolUse = macToolUseService.getHangNumIsNull(workPlan.getId());
if (macToolUse != null && macToolUse.getId() != null) {
List<MesRbFilePreserveSlotEntity> smSlotList = preserveSlotList.stream().filter(i -> i.getSlotName().contains("水膜连续性")).toList();
for (MesRbFilePreserveSlotEntity dsRbFilePreserveSlot : smSlotList) {
if (dsRbFilePreserveSlot.getSlotName().contains("水膜连续性")) {
MesQcProduceRunEntity qcProduceRun = new MesQcProduceRunEntity();
qcProduceRun.setQualified("1");
// cdl 20250218 修改分槽同一槽号连续出现
this.setTemplateData(dsRbFilePreserveSlot, qcProduceRun, newDsRbFilePreserveSlot, dsRbFilePreserveDetailList, newDsRbFilePreserveDetail, workPlan, temporaryList, prMacToolUse);
}
}
}
dsRbFilePreserveSlotList.addAll(temporaryList.stream().sorted(Comparator.comparing(ProduceMonitorFileSlotVO::getSlotIndex)).toList());
}
private void setTemplateData(MesRbFilePreserveSlotEntity dsRbFilePreserveSlot, MesQcProduceRunEntity qcProduceRun, ProduceMonitorFileSlotVO newDsRbFilePreserveSlot, List<MesRbFilePreserveDetailEntity> dsRbFilePreserveDetailList, MesRbFilePreserveDetailEntity newDsRbFilePreserveDetail, WorkPlan workPlan, List<ProduceMonitorFileSlotVO> temporaryList, MacToolUse prMacToolUse) {
if (dsRbFilePreserveSlot != null && dsRbFilePreserveSlot.getId() != null) {
// Date转String
// 装入槽子对应的信息
newDsRbFilePreserveSlot = new ProduceMonitorFileSlotVO();
newDsRbFilePreserveSlot.setRfpsType(dsRbFilePreserveSlot.getRfpsType());
newDsRbFilePreserveSlot.setInsertIndex(dsRbFilePreserveSlot.getInsertIndex());
newDsRbFilePreserveSlot.setSlotName(dsRbFilePreserveSlot.getSlotName());
newDsRbFilePreserveSlot.setSlotIndex(dsRbFilePreserveSlot.getSlotIndex());
List<MesRbFilePreserveDetailEntity> preserveDetailList = mesRbFilePreserveDetailService.getByRfpsId(dsRbFilePreserveSlot.getId());
if (!preserveDetailList.isEmpty()) {
dsRbFilePreserveDetailList = new ArrayList<>();
for (int i = 0; i < preserveDetailList.size(); i++) {
MesRbFilePreserveDetailEntity dsRbFilePreserveDetail = preserveDetailList.get(i);
Short rfpsType = 0;
if (dsRbFilePreserveDetail != null && dsRbFilePreserveDetail.getRfpsId() != null) {
rfpsType = mesRbFilePreserveSlotService.getById(dsRbFilePreserveDetail.getRfpsId()).getRfpsType();
}
newDsRbFilePreserveDetail = new MesRbFilePreserveDetailEntity();
newDsRbFilePreserveDetail.setDetailName(dsRbFilePreserveDetail.getDetailName());
newDsRbFilePreserveDetail.setDetailIndex(dsRbFilePreserveDetail.getDetailIndex());
// 工艺要求
newDsRbFilePreserveDetail.setAsk(dsRbFilePreserveDetail.getAsk());
newDsRbFilePreserveDetail.setParamName(dsRbFilePreserveDetail.getParamName());
if (i == 0) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate());
} else if (i == 1) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate());
}
if (rfpsType == 1) { // 模板一
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
}
} else if (rfpsType == 2) { // 模板二
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
}
} else if (rfpsType == 3) { // 模板三
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
}
} else if (rfpsType == 4) { // 模板四
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
}
} else if (rfpsType == 5 || rfpsType == 22) { // 模板五
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
}
} else if (rfpsType == 6) { // 模板六
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
}
} else if (rfpsType == 7) { // 模板七
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
}
} else if (rfpsType == 8) { // 模板八
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
}
} else if (rfpsType == 9) { // 模板九
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
}
} else if (rfpsType == 10) { // 模板十
if (i == 0) {
newDsRbFilePreserveDetail.setQualified(qcProduceRun.getQualified());
}
} else if (rfpsType == 11) { // 模板十一
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
}
} else if (rfpsType == 12) { // 模板十二
if (i == 0) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataThree());
}
} else if (rfpsType == 13) { // 模板十三
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
}
} else if (rfpsType == 14) { // 模板十四
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 10) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 11) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
}
} else if (rfpsType == 15) { // 模板十五
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 5) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataFour());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 10) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 11) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
} else if (i == 12) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven());
} else if (i == 13) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwelve());
}
} else if (rfpsType == 16) { // 模板十六
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 10) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 11) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
} else if (i == 12) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven());
} else if (i == 13) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwelve());
} else if (i == 14) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThirteen());
} else if (i == 15) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFourteen());
}
} else if (rfpsType == 17) { // 模板十七
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
}
} else if (rfpsType == 18) { // 模板十八
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
}
} else if (rfpsType == 19) { // 模板十九 //zxh 20250519 新增模板19和模板20
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 7) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataEight());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
} else if (i == 10) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven());
} else if (i == 11) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwelve());
}
} else if (rfpsType == 20) { // 模板二十
if (i == 0) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate());
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getInDate());
} else if (i == 1) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate());
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getInDate());
} else if (i == 2) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate());
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getOutDate());
} else if (i == 3) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate());
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getOutDate());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
}
} else if (rfpsType == 21) { // 模板十三
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
}
}
String detailName = dsRbFilePreserveDetail.getDetailName();
if (detailName != null) {
if (detailName.contains("温度")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getTempSlot());
} else if (detailName.contains("电导率")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getEleRate());
} else if (detailName.contains("电流") && !(detailName.contains("壳体") || detailName.contains("插针"))) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getEleStream());
} else if (detailName.contains("链速")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getVSpeed());
} else if (detailName.contains("镍离子")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getNiValue());
} else if (detailName.contains("pH值")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getPhValue());
}
//zxh 20250604 新增软起时间和工作电压
else if (detailName.contains("软起时间")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getSoftWorkTime());
} else if (detailName.contains("工作电压")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getVoltage());
} else if (detailName.contains("初始电压")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getStartVol());
}
}
dsRbFilePreserveDetailList.add(newDsRbFilePreserveDetail);
}
newDsRbFilePreserveSlot.setChildrenList(dsRbFilePreserveDetailList);
}
temporaryList.add(newDsRbFilePreserveSlot);
}
}
private List<JSONObject> getCheckListNotNG(Long woId, List<WorkPlanExpandVO> wpList, Boolean eleOrPrint) { private List<JSONObject> getCheckListNotNG(Long woId, List<WorkPlanExpandVO> wpList, Boolean eleOrPrint) {
List<JSONObject> checkList = new ArrayList<>(); List<JSONObject> checkList = new ArrayList<>();
//组装检测项集合 //组装检测项集合

@ -61,14 +61,14 @@ public class ErpDataOemClientImpl implements IErpDataOemClient {
} }
@Override @Override
public R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, String v_pedate, Long v_woporqty, String v_pricetype, String v_excnote, String v_excflag, String v_old_wono) { public R<String> fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, String v_pedate, Double v_woporqty, String v_pricetype) {
Date pedate = DateUtil.parse(v_pedate, "yyyy-MM-dd HH:mm:ss"); Date pedate = DateUtil.parse(v_pedate, "yyyy-MM-dd HH:mm:ss");
return erpDataOemService.fullOrderOutsourcing(v_prtno, v_prtlotno, v_splcode, v_splycode, v_seqcc, v_sono, v_planner, pedate, v_woporqty, v_pricetype, v_excnote, v_excflag, v_old_wono); return R.data(erpDataOemService.fullOrderOutsourcing(v_prtno, v_prtlotno, v_splcode, v_splycode, v_seqcc, v_sono, v_planner, pedate, v_woporqty, v_pricetype));
} }
@Override @Override
public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, String v_woreqdat, Long v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id, String v_old_wono, String v_excnote, String v_excflag) { public R<String> collaborativeOutsourcing(String v_prtno, String v_prtlotno, String v_woreqdat, Double v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id) {
Date woreqdat = DateUtil.parse(v_woreqdat, "yyyy-MM-dd HH:mm:ss"); Date woreqdat = DateUtil.parse(v_woreqdat, "yyyy-MM-dd HH:mm:ss");
return erpDataOemService.collaborativeOutsourcing(v_prtno, v_prtlotno, woreqdat, v_woporqty, v_usedeptcode, v_usedept, v_splcode, v_splycode, v_kdofplat, v_wono, v_sono, v_mtnman, v_planner, v_yardman, v_roam_no, v_craft_no, v_craft_id, v_old_wono, v_excnote, v_excflag); return R.data(erpDataOemService.collaborativeOutsourcing(v_prtno, v_prtlotno, woreqdat, v_woporqty, v_usedeptcode, v_usedept, v_splcode, v_splycode, v_kdofplat, v_wono, v_sono, v_mtnman, v_planner, v_yardman, v_roam_no, v_craft_no, v_craft_id));
} }
} }

@ -5,6 +5,8 @@ import lombok.AllArgsConstructor;
import org.springblade.common.exception.BusinessException; import org.springblade.common.exception.BusinessException;
import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.erpdata.pojo.vo.MeasuringToolMaintainVO;
import org.springblade.erpdata.pojo.vo.PurchaseTrackVO;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.erpdata.service.IErpDataWmsService; import org.springblade.erpdata.service.IErpDataWmsService;
import org.springblade.wms.pojo.entity.StRealtimeStock; import org.springblade.wms.pojo.entity.StRealtimeStock;
@ -37,6 +39,11 @@ public class ErpDataWmsClient implements IErpDataWmsClient{
return R.data(erpDataWmsService.sendErpBuyRequest(extraBill, qty, ldapName)); return R.data(erpDataWmsService.sendErpBuyRequest(extraBill, qty, ldapName));
} }
@Override
public R<String> createOrReplace(String extraBill, String goodsCode, String flag, Double qty, Double amount) throws BusinessException {
return R.data(erpDataWmsService.createOrReplace(extraBill, goodsCode, flag, qty, amount));
}
@Override @Override
public R<String> createMoldPlan(String partCode, String moCode, String plantype, Double quantity, Date needDate, String level, public R<String> createMoldPlan(String partCode, String moCode, String plantype, Double quantity, Date needDate, String level,
String keeper, String createMan, String memo, String urgentType, String erpWoCode) throws BusinessException { String keeper, String createMan, String memo, String urgentType, String erpWoCode) throws BusinessException {
@ -49,8 +56,24 @@ public class ErpDataWmsClient implements IErpDataWmsClient{
return R.data(erpDataWmsService.deleteMoldPlan(erpWoCode)); return R.data(erpDataWmsService.deleteMoldPlan(erpWoCode));
} }
@Override
public R<String> sendErpMaintenance(String goodsCode, String shCode, String location, Date needDate,
String flag ,Double checkQty, String quantityLevel) throws BusinessException {
return R.data(erpDataWmsService.sendErpMaintenance(goodsCode, shCode, location, needDate, flag, checkQty, quantityLevel));
}
@Override @Override
public R<StGoodsExtStatusVO> getGoodsExtStatus(String goodsCode) { public R<StGoodsExtStatusVO> getGoodsExtStatus(String goodsCode) {
return R.data(erpDataWmsService.getGoodsExtStatus(goodsCode)); return R.data(erpDataWmsService.getGoodsExtStatus(goodsCode));
} }
@Override
public R<PurchaseTrackVO> getBuyOrderStatus(String extraBill) {
return R.data(erpDataWmsService.getBuyOrderStatus(extraBill));
}
@Override
public R<MeasuringToolMaintainVO> getMaintenStatus(String goodsCode, String shCode, String location, Date createTime) {
return R.data(erpDataWmsService.getMaintenStatus(goodsCode, shCode, location, createTime));
}
} }

@ -1,8 +1,12 @@
package org.springblade.erpdata.mapper; package org.springblade.erpdata.mapper;
import com.baomidou.mybatisplus.core.mapper.Mapper; import com.baomidou.mybatisplus.core.mapper.Mapper;
import org.springblade.erpdata.pojo.vo.MeasuringToolMaintainVO;
import org.springblade.erpdata.pojo.vo.PurchaseTrackVO;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import java.util.Date;
/** /**
* @version 1.0 * @version 1.0
* @program: jonhon-mes-svr * @program: jonhon-mes-svr
@ -16,4 +20,7 @@ public interface ErpDataWmsMapper extends Mapper {
StGoodsExtStatusVO getGoodsExtStatus(String goodsCode); StGoodsExtStatusVO getGoodsExtStatus(String goodsCode);
PurchaseTrackVO getBuyOrderStatus(String extraBill);
MeasuringToolMaintainVO getMaintenStatus(String goodsCode, String shCode, String location, Date createTime);
} }

@ -11,4 +11,29 @@
WHERE prtno = #{goodsCode} WHERE prtno = #{goodsCode}
</select> </select>
<select id="getBuyOrderStatus" resultType="org.springblade.erpdata.pojo.vo.PurchaseTrackVO">
SELECT
a.orderno,
a.relctrler,
a.reqstat
c.userdesc AS relctrler_name,
a.rpno,
d.purcode,
e.userdesc AS purcode_name
FROM dba_mgr.t_purotherrp a
LEFT JOIN aepcs_system.t_sysuser c ON a.relctrler = c.username
LEFT JOIN dba_mgr.t_poitem d ON a.rpno = d.rpno
LEFT JOIN aepcs_system.t_sysuser e ON d.purcode = e.username
WHERE a.orderno = #{extraBill}
</select>
<select id="getMaintenStatus" resultType="org.springblade.erpdata.pojo.vo.MeasuringToolMaintainVO">
SELECT chkflag,
chkdate
FROM dba_mgr.t_toochkinf
WHERE prtno = #{goodsCode}
AND warno = #{shCode}
AND warlocno = #{location}
AND applydate= #{createTime}
</select>
</mapper> </mapper>

@ -45,11 +45,8 @@ public interface IErpDataOemService {
* @param v_pedate 计划完成时间 * @param v_pedate 计划完成时间
* @param v_woporqty 下达数量 * @param v_woporqty 下达数量
* @param v_pricetype 加工类型 * @param v_pricetype 加工类型
* @param v_excnote 返回结果
* @param v_excflag 返回状态
* @param v_old_wono 老系统生成的外协订单号
*/ */
R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, Date v_pedate, Long v_woporqty, String v_pricetype, String v_excnote, String v_excflag, String v_old_wono); String fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, Date v_pedate, Double v_woporqty, String v_pricetype);
/** /**
* 整单外协订单接收 * 整单外协订单接收
@ -71,9 +68,6 @@ public interface IErpDataOemService {
* @param v_roam_no B号 * @param v_roam_no B号
* @param v_craft_no C号 * @param v_craft_no C号
* @param v_craft_id 零件工艺ID * @param v_craft_id 零件工艺ID
* @param v_old_wono 老系统生成的外协订单号
* @param v_excnote 返回结果
* @param v_excflag 返回状态
*/ */
R collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Long v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id, String v_old_wono, String v_excnote, String v_excflag); String collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Double v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id);
} }

@ -1,6 +1,8 @@
package org.springblade.erpdata.service; package org.springblade.erpdata.service;
import org.springblade.common.exception.BusinessException; import org.springblade.common.exception.BusinessException;
import org.springblade.erpdata.pojo.vo.MeasuringToolMaintainVO;
import org.springblade.erpdata.pojo.vo.PurchaseTrackVO;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.wms.pojo.entity.StRealtimeStock; import org.springblade.wms.pojo.entity.StRealtimeStock;
@ -26,4 +28,12 @@ public interface IErpDataWmsService {
String deleteMoldPlan(String erpWoCode) throws BusinessException; String deleteMoldPlan(String erpWoCode) throws BusinessException;
StGoodsExtStatusVO getGoodsExtStatus(String goodsCode); StGoodsExtStatusVO getGoodsExtStatus(String goodsCode);
String createOrReplace(String extraBill, String goodsCode, String flag, Double qty, Double amount) throws BusinessException;
PurchaseTrackVO getBuyOrderStatus(String extraBill);
String sendErpMaintenance(String goodsCode, String shCode, String location, Date needDate, String flag, Double checkQty, String quantityLevel) throws BusinessException;
MeasuringToolMaintainVO getMaintenStatus(String goodsCode, String shCode, String location, Date createTime);
} }

@ -4,12 +4,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import oracle.jdbc.internal.OracleTypes; import oracle.jdbc.internal.OracleTypes;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.desk.oem.pojo.request.PriceSheetQuery; import org.springblade.desk.oem.pojo.request.PriceSheetQuery;
import org.springblade.desk.oem.pojo.vo.PriceSheetVO; import org.springblade.desk.oem.pojo.vo.PriceSheetVO;
import org.springblade.erpdata.mapper.ErpDataOemMapper; import org.springblade.erpdata.mapper.ErpDataOemMapper;
import org.springblade.erpdata.mapper.ErpDataProduceMapper; import org.springblade.erpdata.mapper.ErpDataProduceMapper;
import org.springblade.erpdata.service.IErpDataOemService; import org.springblade.erpdata.service.IErpDataOemService;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.sql.DataSource; import javax.sql.DataSource;
@ -33,6 +38,8 @@ public class ErpDataOemServiceImpl implements IErpDataOemService {
private final ErpDataOemMapper erpDataOemMapper; private final ErpDataOemMapper erpDataOemMapper;
private final JdbcTemplate jdbcTemplate;
@Override @Override
public void closeErpOrder(String woCode, String memo) { public void closeErpOrder(String woCode, String memo) {
log.info("关闭erp外协订单 - 单号:{},备注:{}", woCode, memo); log.info("关闭erp外协订单 - 单号:{},备注:{}", woCode, memo);
@ -62,140 +69,111 @@ public class ErpDataOemServiceImpl implements IErpDataOemService {
} }
@Override @Override
public R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, Date v_pedate, Long v_woporqty, String v_pricetype, String v_excnote, String v_excflag, String v_old_wono) { public String fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono,
Map<String, Object> result = new HashMap<>(); String v_planner, Date v_pedate, Double v_woporqty, String v_pricetype) {
String sql = "{call dba_mgr.pro_rbwxgensc(" + SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
"v_prtno => ?, " + // 指定存储过程名(包含 DB Link)
"v_prtlotno => ?, " + .withProcedureName("dba_mgr.pro_rbwxgensc")
"v_splcode => ?, " + // 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
"v_splycode => ?, " + .withoutProcedureColumnMetaDataAccess()
"v_seqcc => ?, " + // 显式声明参数
"v_sono => ?, " + .declareParameters(
"v_planner => ?, " + new SqlParameter("v_prtno", Types.VARCHAR), // IN
"v_pedate => ?, " + new SqlParameter("v_prtlotno", Types.VARCHAR), // IN
"v_woporqty => ?, " + new SqlParameter("v_splcode", Types.VARCHAR), // IN
"v_pricetype => ?, " + new SqlParameter("v_splycode", Types.VARCHAR), // IN
"v_excnote => ?, " + new SqlParameter("v_seqcc", Types.VARCHAR), // IN
"v_excflag => ?, " + new SqlParameter("v_sono", Types.VARCHAR), // IN
"v_old_wono => ?)}"; new SqlParameter("v_planner", Types.VARCHAR), // IN
try (Connection conn = dataSource.getConnection(); new SqlParameter("v_pedate", Types.DATE), // IN
CallableStatement cs = conn.prepareCall(sql)) { new SqlParameter("v_woporqty", Types.DOUBLE), // IN
new SqlParameter("v_pricetype", Types.VARCHAR), // IN
// 设置输入参数 new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT
cs.setString(1, v_prtno); new SqlOutParameter("v_excflag", Types.VARCHAR), // OUT
cs.setString(2, v_prtlotno); new SqlOutParameter("v_old_wono", Types.VARCHAR) // OUT
cs.setString(3, v_splcode); );
cs.setString(4, v_splycode); // 2. 封装输入参数
cs.setString(5, v_seqcc); Map<String, Object> inParams = new HashMap<>();
cs.setString(6, v_sono); inParams.put("v_prtno", v_prtno);
cs.setString(7, v_planner); inParams.put("v_prtlotno", v_prtlotno);
cs.setDate(8, new java.sql.Date(v_pedate.getTime())); inParams.put("v_splcode", v_splcode);
cs.setLong(9, v_woporqty); inParams.put("v_splycode", v_splycode);
cs.setString(10, v_pricetype); inParams.put("v_seqcc", v_seqcc);
inParams.put("v_sono", v_sono);
// 注册游标OUT参数 inParams.put("v_planner", v_planner);
cs.registerOutParameter(11, OracleTypes.CURSOR); inParams.put("v_pedate", v_pedate);
cs.registerOutParameter(12, OracleTypes.CURSOR); inParams.put("v_woporqty", v_woporqty);
cs.registerOutParameter(13, OracleTypes.CURSOR); inParams.put("v_pricetype", v_pricetype);
log.debug("协作外协订单接收存储过程输入参数: v_prtno={}, v_prtlotno={}, v_splcode={}, v_splycode={}, v_seqcc={}, " +
"v_sono={}, v_planner={}, v_pedate={}, v_woporqty={}, v_pricetype={}, " +
"v_excnote={}, v_excflag={}, v_old_wono={}", // 3. 执行并获取结果 Map
v_prtno, v_prtlotno, v_splcode, v_splycode, v_seqcc, Map<String, Object> resultMap = jdbcCall.execute(inParams);
v_sono, v_planner, v_pedate, v_woporqty, v_pricetype,
v_excnote, v_excflag, v_old_wono); // 4. 提取输出参数
// 执行 String excflag = (String) resultMap.get("v_excflag");
cs.execute(); String excnote = (String) resultMap.get("v_excnote");
String oldWono = (String) resultMap.get("v_old_wono");
// 获取结果 return oldWono;
List<Map<String, Object>> excnote = convertResultSetToList((ResultSet) cs.getObject(11));
List<Map<String, Object>> excflag = convertResultSetToList((ResultSet) cs.getObject(12));
List<Map<String, Object>> oldWoNo = convertResultSetToList((ResultSet) cs.getObject(13));
result.put("result", oldWoNo);
log.info("协作外协订单接收成功 - {}", result);
} catch (Exception e) {
log.error("协作外协订单接收失败", e);
return R.fail("协作外协订单接收失败");
}
return R.data(result);
} }
@Override @Override
public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Long v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id, String v_old_wono, String v_excnote, String v_excflag) { public String collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Double v_woporqty, String v_usedeptcode,
Map<String, Object> result = new HashMap<>(); String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono,
String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id) {
// SQL语句,注意nvl函数的处理 SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
String sql = "{call dba_mgr.pro_rbwxgen(" + // 指定存储过程名(包含 DB Link)
"v_prtno => ?, " + .withProcedureName("dba_mgr.pro_rbwxgen")
"v_prtlotno => ?, " + // 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
"v_woreqdat => ?, " + .withoutProcedureColumnMetaDataAccess()
"v_woporqty => ?, " + // 显式声明参数
"nvl(v_usedeptcode, v_usedept) => ?, " + // 注意:Java端需要处理这个逻辑 .declareParameters(
"v_splcode => ?, " + new SqlParameter("v_prtno", Types.VARCHAR), // IN
"v_splycode => ?, " + new SqlParameter("v_prtlotno", Types.VARCHAR), // IN
"v_kdofplat => ?, " + new SqlParameter("v_woreqdat", Types.DATE), // IN
"v_wono => ?, " + new SqlParameter("v_woporqty", Types.DOUBLE), // IN
"v_sono => ?, " + new SqlParameter("v_usedept", Types.VARCHAR), // IN
"v_mtnman => ?, " + new SqlParameter("v_splcode", Types.VARCHAR), // IN
"v_planner => ?, " + new SqlParameter("v_splycode", Types.VARCHAR), // IN
"v_yardman => ?, " + new SqlParameter("v_kdofplat", Types.VARCHAR), // IN
"v_roam_no => ?, " + new SqlParameter("v_wono", Types.VARCHAR), // IN
"v_craft_no => ?, " + new SqlParameter("v_sono", Types.VARCHAR), // IN
"v_craft_id => ?, " + new SqlParameter("v_mtnman", Types.VARCHAR), // IN
"v_old_wono => ?, " + new SqlParameter("v_planner", Types.VARCHAR), // IN
"v_excnote => ?, " + new SqlParameter("v_yardman", Types.VARCHAR), // IN
"v_excflag => ?) }"; // 返回游标3 new SqlParameter("v_roam_no", Types.VARCHAR), // IN
new SqlParameter("v_craft_no", Types.VARCHAR), // IN
try (Connection conn = dataSource.getConnection(); new SqlParameter("v_craft_id", Types.BIGINT), // IN
CallableStatement cs = conn.prepareCall(sql)) { new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT
new SqlOutParameter("v_excflag", Types.VARCHAR), // OUT
// 设置输入参数 new SqlOutParameter("v_old_wono", Types.VARCHAR) // OUT
cs.setString(1, v_prtno); );
cs.setString(2, v_prtlotno); // 2. 封装输入参数
cs.setDate(3, v_woreqdat != null ? new java.sql.Date(v_woreqdat.getTime()) : null); Map<String, Object> inParams = new HashMap<>();
cs.setLong(4, v_woporqty); inParams.put("v_prtno", v_prtno);
inParams.put("v_prtlotno", v_prtlotno);
// 处理 nvl(v_usedeptcode, v_usedept) inParams.put("v_woreqdat", v_woreqdat);
String deptValue = v_usedeptcode != null ? v_usedeptcode : v_usedept; inParams.put("v_woporqty", v_woporqty);
cs.setString(5, deptValue); inParams.put("v_usedept", v_usedeptcode != null ? v_usedeptcode : v_usedept);
inParams.put("v_splcode", v_splcode);
cs.setString(6, v_splcode); inParams.put("v_splycode", v_planner);
cs.setString(7, v_splycode); inParams.put("v_kdofplat", v_kdofplat);
cs.setString(8, v_kdofplat); inParams.put("v_wono", v_wono);
cs.setString(9, v_wono); inParams.put("v_sono", v_sono);
cs.setString(10, v_sono); inParams.put("v_mtnman", v_mtnman);
cs.setString(11, v_mtnman); inParams.put("v_planner", v_planner);
cs.setString(12, v_planner); inParams.put("v_yardman", v_yardman);
cs.setString(13, v_yardman); inParams.put("v_roam_no", v_roam_no);
cs.setString(14, v_roam_no); inParams.put("v_craft_no", v_craft_no);
cs.setString(15, v_craft_no); inParams.put("v_craft_id", v_craft_id);
cs.setLong(16, v_craft_id);
// 3. 执行并获取结果 Map
// 注册游标OUT参数 Map<String, Object> resultMap = jdbcCall.execute(inParams);
cs.registerOutParameter(17, OracleTypes.CURSOR); // cursor1
cs.registerOutParameter(18, OracleTypes.CURSOR); // cursor2 // 4. 提取输出参数
cs.registerOutParameter(19, OracleTypes.CURSOR); // cursor3 String excflag = (String) resultMap.get("v_excflag");
log.debug("外协工单生成存储过程输入参数: v_prtno={}, v_prtlotno={}, v_woreqdat={}, v_woporqty={}, " + String excnote = (String) resultMap.get("v_excnote");
"v_usedeptcode={}, v_usedept={}, v_splcode={}, v_splycode={}, v_kdofplat={}, " + String oldWono = (String) resultMap.get("v_old_wono");
"v_wono={}, v_sono={}, v_mtnman={}, v_planner={}, v_yardman={}, v_roam_no={}, " + return oldWono;
"v_craft_no={}, v_craft_id={}, v_old_wono={}, v_excnote={}, v_excflag={}, deptValue={}",
v_prtno, v_prtlotno, v_woreqdat, v_woporqty,
v_usedeptcode, v_usedept, v_splcode, v_splycode, v_kdofplat,
v_wono, v_sono, v_mtnman, v_planner, v_yardman, v_roam_no,
v_craft_no, v_craft_id, v_old_wono, v_excnote, v_excflag, deptValue);
// 执行存储过程
cs.execute();
// 获取游标结果
List<Map<String, Object>> oldWoNo = convertResultSetToList((ResultSet) cs.getObject(17));
List<Map<String, Object>> excnote = convertResultSetToList((ResultSet) cs.getObject(18));
List<Map<String, Object>> excflag = convertResultSetToList((ResultSet) cs.getObject(19));
result.put("result", oldWoNo);
log.info("整单外协订单接收成功 - {}", result);
} catch (Exception e) {
log.error("整单外协订单接收失败", e);
return R.fail("整单外协订单接收失败");
}
return R.data(result);
} }
/** /**

@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springblade.common.exception.BusinessException; import org.springblade.common.exception.BusinessException;
import org.springblade.erpdata.mapper.ErpDataWmsMapper; import org.springblade.erpdata.mapper.ErpDataWmsMapper;
import org.springblade.erpdata.pojo.vo.MeasuringToolMaintainVO;
import org.springblade.erpdata.pojo.vo.PurchaseTrackVO;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.erpdata.service.IErpDataWmsService; import org.springblade.erpdata.service.IErpDataWmsService;
import org.springblade.wms.pojo.entity.StRealtimeStock; import org.springblade.wms.pojo.entity.StRealtimeStock;
@ -125,6 +127,47 @@ public class ErpDataWmsServiceImpl implements IErpDataWmsService {
return excflag; return excflag;
} }
@Override
public String createOrReplace(String extraBill, String goodsCode, String flag, Double qty, Double amount) throws BusinessException {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
// 指定存储过程名(包含 DB Link)
.withProcedureName("dba_mgr.pro_rbmesinvdeptoutchg")
// 关闭元数据访问(DBLink 必须加)
.withoutProcedureColumnMetaDataAccess()
// 显式声明参数(顺序必须和存储过程一致)
.declareParameters(
new SqlParameter("v_wono", Types.VARCHAR), // IN
new SqlParameter("v_prtno", Types.VARCHAR), // IN
new SqlParameter("v_flag", Types.VARCHAR), // IN
new SqlParameter("v_reqqty", Types.DOUBLE), // IN
new SqlParameter("v_amount", Types.DOUBLE), // IN
new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT
new SqlOutParameter("v_excflag", Types.VARCHAR) // OUT
);
// 2. 封装输入参数
Map<String, Object> inParams = new HashMap<>();
inParams.put("v_wono", extraBill == null ? "" : extraBill);
inParams.put("v_prtno", goodsCode == null ? "" : goodsCode);
inParams.put("v_flag", flag == null ? "" : flag);
inParams.put("v_reqqty", qty == null ? 0D : qty);
inParams.put("v_amount", amount == null ? 0D : amount);
// 3. 执行并获取结果 Map
Map<String, Object> resultMap = jdbcCall.execute(inParams);
// 4. 提取输出参数
String excflag = (String) resultMap.get("v_excflag");
String excnote = (String) resultMap.get("v_excnote");
// 5. 业务判断
if ("0".equals(excflag)) {
throw new BusinessException("申报信息修改或删除erp失败!" + excnote);
}
return excflag;
}
@Override @Override
public String createMoldPlan(String partCode, String moCode, String plantype, Double quantity, Date needDate, String level, public String createMoldPlan(String partCode, String moCode, String plantype, Double quantity, Date needDate, String level,
String keeper, String createMan, String memo, String urgentType, String erpWoCode) throws BusinessException{ String keeper, String createMan, String memo, String urgentType, String erpWoCode) throws BusinessException{
@ -215,9 +258,66 @@ public class ErpDataWmsServiceImpl implements IErpDataWmsService {
return excflag; return excflag;
} }
@Override
public String sendErpMaintenance(String goodsCode, String shCode, String location, Date needDate,
String flag ,Double checkQty, String quantityLevel) throws BusinessException {
// 1. 创建存储过程调用
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
// 存储过程名 + DBLink
.withProcedureName("dba_mgr.pro_rbmestoolchkmtn")
// 关闭元数据(DBLink必须加)
.withoutProcedureColumnMetaDataAccess()
// 声明参数:顺序必须和存储过程一致!
.declareParameters(
new SqlParameter("v_prtno", Types.VARCHAR),
new SqlParameter("v_warno", Types.VARCHAR),
new SqlParameter("v_warlocno", Types.VARCHAR),
new SqlParameter("v_applydate", Types.DATE),
new SqlParameter("v_typeflag", Types.VARCHAR),
new SqlParameter("v_chkqty", Types.DOUBLE),
new SqlParameter("v_prtlotno", Types.VARCHAR),
new SqlOutParameter("v_excnote", Types.VARCHAR),
new SqlOutParameter("v_excflag", Types.VARCHAR)
);
// 2. 封装输入参数
Map<String, Object> inParams = new HashMap<>();
inParams.put("v_prtno", goodsCode);
inParams.put("v_warno", shCode);
inParams.put("v_warlocno", location);
inParams.put("v_applydate", needDate);
inParams.put("v_typeflag", flag);
inParams.put("v_chkqty", checkQty);
inParams.put("v_prtlotno", quantityLevel);
// 3. 执行存储过程
Map<String, Object> resultMap = jdbcCall.execute(inParams);
// 4. 获取输出参数
String excflag = (String) resultMap.get("v_excflag");
String excnote = (String) resultMap.get("v_excnote");
// 5. 业务判断
if ("0".equals(excflag)) {
throw new BusinessException("量具保养发送失败! " + excnote);
}
return excflag;
}
@Override @Override
public StGoodsExtStatusVO getGoodsExtStatus(String goodsCode){ public StGoodsExtStatusVO getGoodsExtStatus(String goodsCode){
return erpDataWmsMapper.getGoodsExtStatus(goodsCode); return erpDataWmsMapper.getGoodsExtStatus(goodsCode);
} }
@Override
public PurchaseTrackVO getBuyOrderStatus(String extraBill) {
return erpDataWmsMapper.getBuyOrderStatus(extraBill);
}
@Override
public MeasuringToolMaintainVO getMaintenStatus(String goodsCode, String shCode, String location, Date createTime) {
return erpDataWmsMapper.getMaintenStatus(goodsCode, shCode, location, createTime);
}
} }

@ -611,8 +611,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
equipAbilityList = equipAbilityService.list(Wrappers.<EquipAbilityEntity>lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId()).eq(EquipAbilityEntity::getProcessId,craft.getPpsId())); equipAbilityList = equipAbilityService.list(Wrappers.<EquipAbilityEntity>lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId()).eq(EquipAbilityEntity::getProcessId,craft.getPpsId()));
} }
if (CollectionUtils.isEmpty(equipAbilityList)) { if (CollectionUtils.isEmpty(equipAbilityList)) {
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力;"); errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力;");
// order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力"); // order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力");
// order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); // order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order); // yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
@ -653,7 +653,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (CollectionUtils.isEmpty(equipResourceList)) { if (CollectionUtils.isEmpty(equipResourceList)) {
order.setStatus(YieldOrderEnum.STATUS_APS.getCode()); order.setStatus(YieldOrderEnum.STATUS_APS.getCode());
order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",设备资源已不足"); order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",设备资源已不足");
yieldOrderService.updateById(order); yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
break; break;
@ -863,7 +863,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
hourMap.put("totalTime",totalTime); hourMap.put("totalTime",totalTime);
hourMap.put("standardTime",ability.getStandardTime()); hourMap.put("standardTime",ability.getStandardTime());
hourMap.put("prepareTime",ability.getPrepareTime()); hourMap.put("prepareTime",ability.getPrepareTime());
hourMap.put("hourType",ability.getType()); hourMap.put("hourType",ability.getType() == null ? 0 : ability.getType());
}else{ }else{
if("玻璃封接组装".equals(processMap.get(craft.getPpsId()))){//玻璃封接组装单独计算 if("玻璃封接组装".equals(processMap.get(craft.getPpsId()))){//玻璃封接组装单独计算
hourMap = calPersonHoursByBlfjzz(order.getYpQty(),part); hourMap = calPersonHoursByBlfjzz(order.getYpQty(),part);
@ -900,8 +900,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (CollectionUtils.isNotEmpty(personResourceList)) { if (CollectionUtils.isNotEmpty(personResourceList)) {
workPlan.setMakeTeam(personResourceList.get(0).getTeamId()); workPlan.setMakeTeam(personResourceList.get(0).getTeamId());
}else{ }else{
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力;"); errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力;");
// order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力"); // order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力");
// order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); // order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order); // yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
@ -918,8 +918,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
} }
} else { } else {
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力;"); errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力;");
// order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力"); // order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力");
// order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); // order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order); // yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
@ -945,9 +945,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlanList.add(workPlan); workPlanList.add(workPlan);
log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",人员匹配完成"); log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",人员匹配完成");
} else { } else {
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力;"); errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力;");
log.info("未匹配到设备和人力资源的工序是:" + craft.getPpsId()); log.info("未匹配到设备和人力资源的工序是:" + craft.getPpsId());
// order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力"); // order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力");
// order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); // order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order); // yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
@ -963,6 +963,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if(errorInfo.length() > 0){ if(errorInfo.length() > 0){
order.setErrorInfo(errorInfo.toString()); order.setErrorInfo(errorInfo.toString());
order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
order.setUpdateTime(new Date());
yieldOrderService.updateById(order); yieldOrderService.updateById(order);
} }
continue; continue;
@ -1039,7 +1040,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
yieldOrderService.updateById(order); yieldOrderService.updateById(order);
workOrderList.add(workOrder); workOrderList.add(workOrder);
//生成生产运行记录 //生成生产运行记录
disTaskingClient.saveWorkOrderRun(workOrder.getId().toString()); //disTaskingClient.saveWorkOrderRun(workOrder.getId().toString());
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){ if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){
StGlassCakeOutDTO glassDto = new StGlassCakeOutDTO(); StGlassCakeOutDTO glassDto = new StGlassCakeOutDTO();
glassDto.setCardNo(workOrder.getCardNo()); glassDto.setCardNo(workOrder.getCardNo());

@ -56,9 +56,10 @@ public class StBuyOrderController extends BladeController {
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiLog("采购申请单 详情") @ApiLog("采购申请单 详情")
@Operation(summary = "详情", description = "传入stBuyOrder") @Operation(summary = "详情", description = "传入stBuyOrder")
public R<StBuyOrderVO> detail(StBuyOrder stBuyOrder) { public R<StBuyOrder> detail(StBuyOrder stBuyOrder) {
StBuyOrder detail = stBuyOrderService.getOne(Condition.getQueryWrapper(stBuyOrder)); // StBuyOrder detail = stBuyOrderService.getOne(Condition.getQueryWrapper(stBuyOrder));
return R.data(StBuyOrderWrapper.build().entityVO(detail)); StBuyOrder detail = stBuyOrderService.getDetail(stBuyOrder.getId());
return R.data(detail);
} }
/** /**
* 采购申请单 分页 * 采购申请单 分页

@ -22,7 +22,6 @@ import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.Func;
import org.springblade.wms.excel.StMoldApplyForExcel; import org.springblade.wms.excel.StMoldApplyForExcel;
import org.springblade.wms.pojo.dto.StMoldApplyForDTO; import org.springblade.wms.pojo.dto.StMoldApplyForDTO;
import org.springblade.wms.pojo.entity.StBuyOrder;
import org.springblade.wms.pojo.entity.StMoldApplyFor; import org.springblade.wms.pojo.entity.StMoldApplyFor;
import org.springblade.wms.pojo.vo.StMoldApplyForVO; import org.springblade.wms.pojo.vo.StMoldApplyForVO;
import org.springblade.wms.service.IStMoldApplyForService; import org.springblade.wms.service.IStMoldApplyForService;

@ -100,16 +100,16 @@ public class StWmsRequestController extends BladeController {
return R.status(stWmsRequestService.save(stWmsRequest)); return R.status(stWmsRequestService.save(stWmsRequest));
} }
// /** /**
// * 仓库提请记录 修改 * 仓库提请记录 修改
// */ */
// @PostMapping("/update") @PostMapping("/update")
// @ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
// @ApiLog("仓库提请记录 修改") @ApiLog("仓库提请记录 修改")
// @Operation(summary = "修改", description = "传入stWmsRequest") @Operation(summary = "修改", description = "传入stWmsRequest")
// public R update(@Valid @RequestBody StWmsRequest stWmsRequest) { public R update(@Valid @RequestBody StWmsRequest stWmsRequest) {
// return R.status(stWmsRequestService.updateByErp(stWmsRequest)); return R.status(stWmsRequestService.updateByErp(stWmsRequest));
// } }
/** /**
* 仓库提请提交 * 仓库提请提交
@ -158,7 +158,7 @@ public class StWmsRequestController extends BladeController {
@ApiLog("仓库提请记录 删除") @ApiLog("仓库提请记录 删除")
@Operation(summary = "逻辑删除", description = "传入ids") @Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(stWmsRequestService.deleteLogic(Func.toLongList(ids))); return R.status(stWmsRequestService.deleteByErp(Func.toLongList(ids)));
} }
/** /**

@ -60,6 +60,8 @@ public interface IStBuyOrderService extends BaseService<StBuyOrder> {
Long buyOrderApplyFor(String goodsCode, Double buyQty, Long userId, Date buyDate, Long checkUserId, Date checkDate) throws Exception; Long buyOrderApplyFor(String goodsCode, Double buyQty, Long userId, Date buyDate, Long checkUserId, Date checkDate) throws Exception;
StBuyOrder getDetail(Long id);
// JSONObject otherPlanDetail(Long id, String prtno); // JSONObject otherPlanDetail(Long id, String prtno);
} }

@ -45,5 +45,9 @@ public interface IStWmsRequestService extends BaseService<StWmsRequest> {
void approvalRequest(Long id, Short approvalResult, BladeUser user); void approvalRequest(Long id, Short approvalResult, BladeUser user);
void batchSaveOrEdit(List<StWmsRequest> stWmsRequestList, BladeUser user); void batchSaveOrEdit(List<StWmsRequest> stWmsRequestList, BladeUser user);
boolean updateByErp(StWmsRequest stWmsRequest);
boolean deleteByErp(List<Long> longList);
} }

@ -13,6 +13,8 @@ import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.desk.common.feign.IMesApprovalRecordClient; import org.springblade.desk.common.feign.IMesApprovalRecordClient;
import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity; import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity;
import org.springblade.erpdata.feign.IErpDataWmsClient;
import org.springblade.erpdata.pojo.vo.PurchaseTrackVO;
import org.springblade.system.feign.ISysClient; import org.springblade.system.feign.ISysClient;
import org.springblade.system.feign.IUserClient; import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
@ -54,6 +56,8 @@ public class StBuyOrderServiceImpl extends BaseServiceImpl<StBuyOrderMapper, StB
private IUserClient userClient; private IUserClient userClient;
@Resource @Resource
private ISysClient sysClient; private ISysClient sysClient;
@Resource
private IErpDataWmsClient erpDataWmsClient;
@Override @Override
public IPage<StBuyOrderVO> selectStBuyOrderPage(IPage<StBuyOrderVO> page, StBuyOrderVO stBuyOrder) { public IPage<StBuyOrderVO> selectStBuyOrderPage(IPage<StBuyOrderVO> page, StBuyOrderVO stBuyOrder) {
@ -374,6 +378,27 @@ public class StBuyOrderServiceImpl extends BaseServiceImpl<StBuyOrderMapper, StB
return baseMapper.getByExtraBill(extraBill); return baseMapper.getByExtraBill(extraBill);
} }
@Override
public StBuyOrder getDetail(Long id) {
StBuyOrder buyOrder = this.getById(id);
PurchaseTrackVO purchaseTrackVO = erpDataWmsClient.getBuyOrderStatus(buyOrder.getExtraBill()).getData();
if (purchaseTrackVO == null) {
System.out.println("ERP未查到数据");
}
buyOrder.setErpBuyCode(purchaseTrackVO.getRpno());
buyOrder.setNeedStatus(purchaseTrackVO.getReqstat());
List<User> userList = userClient.listByNameNolike(purchaseTrackVO.getRelctrlerName());
buyOrder.setPlanBuyMan(userList.get(0).getId());
buyOrder.setPlanBuyManName(purchaseTrackVO.getRelctrlerName());
List<User> users = userClient.listByNameNolike(purchaseTrackVO.getPurcodeName());
buyOrder.setBuyMan(users.get(0).getId());
buyOrder.setBuyManName(purchaseTrackVO.getPurcodeName());
this.updateById(buyOrder);
return buyOrder;
}
// @Override // @Override
// public JSONObject otherPlanDetail(Long boId, String goodsCode) { // public JSONObject otherPlanDetail(Long boId, String goodsCode) {
//// JSONObject o = (JSONObject) prPlateGoodsRecordWebService.listByRecordDetail(boId,goodsCode); //// JSONObject o = (JSONObject) prPlateGoodsRecordWebService.listByRecordDetail(boId,goodsCode);

@ -1,5 +1,6 @@
package org.springblade.wms.service.impl; package org.springblade.wms.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
@ -24,7 +25,6 @@ import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.entity.StWmsRequest; import org.springblade.wms.pojo.entity.StWmsRequest;
import org.springblade.wms.pojo.vo.StWmsRequestVO; import org.springblade.wms.pojo.vo.StWmsRequestVO;
import org.springblade.wms.service.IStBuyOrderService; import org.springblade.wms.service.IStBuyOrderService;
import org.springblade.wms.service.IStGoodsService;
import org.springblade.wms.service.IStWmsRequestService; import org.springblade.wms.service.IStWmsRequestService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -225,19 +225,60 @@ public class StWmsRequestServiceImpl extends BaseServiceImpl<StWmsRequestMapper,
String excNote = (String) param.get("v_excnote"); String excNote = (String) param.get("v_excnote");
} }
// @Override @Override
// public boolean updateByErp(StWmsRequest stWmsRequest){ public boolean updateByErp(StWmsRequest stWmsRequest){
//// StBuyOrder stBuyOrder = stBuyOrderService.getById(stWmsRequest.getBoId()); StBuyOrder stBuyOrder = stBuyOrderService.getById(stWmsRequest.getBoId());
//// StGoods goods = stGoodsMapper.selectById(stBuyOrder.getGoodsId()); StGoods goods = stGoodsMapper.selectById(stBuyOrder.getGoodsId());
//// erpDataWmsClient.createOrReplace( StWmsRequest oldRequest = this.getById(stWmsRequest);
//// stBuyOrder.getExtraBill(), try {
//// goods.getGoodsCode(), erpDataWmsClient.createOrReplace(
//// "0", stBuyOrder.getExtraBill(),
//// stWmsRequest.getRequestQty(), goods.getGoodsCode(),
//// stWmsRequest.getRequestQty() "0",
//// ); oldRequest.getRequestQty(),
// return false; stWmsRequest.getRequestQty());
// } } catch (BusinessException e) {
throw new RuntimeException("仓库提请修改ERP失败:" + e.getMessage());
}
Double afterQty = stBuyOrder.getDrawQuantity() - oldRequest.getRequestQty() + stWmsRequest.getRequestQty();
stBuyOrder.setDrawQuantity(afterQty);
stBuyOrder.setSurDrawQty(stBuyOrder.getBuyQty() - afterQty);
stBuyOrderService.updateById(stBuyOrder);
this.updateById(stWmsRequest);
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean deleteByErp(List<Long> deleteIds){
if (CollUtil.isNotEmpty(deleteIds)) {
for (Long id : deleteIds) {
StWmsRequest stWmsRequest = this.getById(id);
StBuyOrder stBuyOrder = stBuyOrderService.getById(stWmsRequest.getBoId());
StGoods goods = stGoodsMapper.selectById(stBuyOrder.getGoodsId());
if (stWmsRequest == null) continue;
try {
erpDataWmsClient.createOrReplace(
stBuyOrder.getExtraBill(),
goods.getGoodsCode(),
"1",
stWmsRequest.getRequestQty(),
0.0);
} catch (BusinessException e) {
throw new RuntimeException("删除模具计划失败:" + e.getMessage());
}
Double afterQty = stBuyOrder.getDrawQuantity() - stWmsRequest.getRequestQty();
stBuyOrder.setDrawQuantity(afterQty);
stBuyOrder.setSurDrawQty(stBuyOrder.getBuyQty() - afterQty);
stBuyOrderService.updateById(stBuyOrder);
}
}
return this.deleteLogic(deleteIds);
}
@Override @Override
public List<StWmsRequestExcel> exportStWmsRequest(Wrapper<StWmsRequest> queryWrapper) { public List<StWmsRequestExcel> exportStWmsRequest(Wrapper<StWmsRequest> queryWrapper) {

Loading…
Cancel
Save