liweidong
liweidong-hj 2 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. 28
      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. 512
      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;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@ -54,7 +50,42 @@ public class MeasuringUpkeepEntity extends BaseEntity {
* 审批状态;-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 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);
static {

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

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

@ -27,12 +27,12 @@ public class IErpDataOemClientFallback implements IErpDataOemClient {
}
@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("协作外协订单接收 失败");
}
@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("整单外协订单接收 失败");
}

@ -3,6 +3,8 @@ package org.springblade.erpdata.feign;
import org.springblade.common.constant.LauncherConstant;
import org.springblade.common.exception.BusinessException;
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.wms.pojo.entity.StRealtimeStock;
import org.springframework.cloud.openfeign.FeignClient;
@ -32,12 +34,20 @@ public interface IErpDataWmsClient {
String SEND_ERP_BUY_REQUEST = API_PREFIX + "/sendErpBuyRequest";
String CREATE_OR_REPLACE = API_PREFIX + "/createOrReplace";
String CREATE_MOLD_PLAN = API_PREFIX + "/createMoldPlan";
String DELETE_MOLD_PLAN = API_PREFIX + "/deleteMoldPlan";
String SEND_ERP_MAINTENANCE = API_PREFIX + "/sendErpMaintenance";
String GET_GOODS_EXT_STATUS = API_PREFIX + "/getGoodsExtStatus";
String GET_BUY_ORDER_STATUS = API_PREFIX + "/getBuyOrderStatus";
String GET_MAINTEN_STATUS = API_PREFIX + "/getMaintenStatus";
/**
* 到期送检发送erp
*/
@ -50,6 +60,14 @@ public interface IErpDataWmsClient {
@PostMapping(SEND_ERP_BUY_REQUEST)
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
*/
@ -64,10 +82,30 @@ public interface IErpDataWmsClient {
@PostMapping(DELETE_MOLD_PLAN)
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)
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;
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.wms.pojo.entity.StRealtimeStock;
import org.springframework.format.annotation.DateTimeFormat;
@ -30,6 +32,12 @@ public class IErpDataWmsClientFallback implements IErpDataWmsClient{
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
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,
@ -42,9 +50,27 @@ public class IErpDataWmsClientFallback implements IErpDataWmsClient{
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
public R<StGoodsExtStatusVO> getGoodsExtStatus(@RequestParam("goodsCode")String goodsCode) {
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 = "二级审批时间")
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)
private String declareManName;
@ -237,5 +264,19 @@ public class StBuyOrder extends TenantEntity {
*/
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;
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.excel.MeasuringUpkeepExcel;
import org.springblade.desk.device.pojo.request.MeasuringUpkeepQuery;
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.wms.pojo.vo.StRealtimeStockVO;
import java.util.List;
@ -46,4 +47,9 @@ public interface MeasuringUpkeepMapper extends BaseMapper<MeasuringUpkeepEntity>
*/
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="balance_money" property="balanceMoney"/>
<result column="sum_num" property="sumNum"/>
<result column="stay_maintain_num" property="stayMaintainNum"/>
</resultMap>
<!-- 多表联合查询SQL -->
@ -176,7 +177,7 @@
and (toolingLibrary.muStatus == null or toolingLibrary.muStatus == '')
and (toolingLibrary.goodsName == null or toolingLibrary.goodsName == '')
and (toolingLibrary.piNo == null or toolingLibrary.piNo == '')">
AND st.sum_num >= 270
AND st.stay_maintain_num >= 270
</if>
<!-- 库房 -->
@ -210,4 +211,35 @@
FROM MES_MEASURING_UPKEEP ${ew.customSqlSegment}
</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>

@ -58,4 +58,6 @@ public interface IMeasuringUpkeepService extends BaseService<MeasuringUpkeepEnti
* @param 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.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.exception.BusinessException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
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.ToolingLibraryVO;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -51,6 +57,9 @@ public class MeasuringUpkeepServiceImpl extends BaseServiceImpl<MeasuringUpkeepM
@Value("${request.lims.url}")
private String limsUrl;
@Resource
IErpDataWmsClient erpDataWmsClient;
@Override
public IPage<MeasuringUpkeepVO> selectMeasuringUpkeepPage(IPage<MeasuringUpkeepVO> page, MeasuringUpkeepQuery measuringUpkeep) {
// return page.setRecords(baseMapper.selectMeasuringUpkeepPage(page, measuringUpkeep));
@ -135,15 +144,57 @@ public class MeasuringUpkeepServiceImpl extends BaseServiceImpl<MeasuringUpkeepM
ids.forEach(id -> {
MeasuringUpkeepEntity entity = new MeasuringUpkeepEntity();
entity.setMiId(id);
entity.setStatus(MeasuringUpkeepEntity.CURSTATUS_NEW);
StRealtimeStockVO stock = baseMapper.getStockById(id);
entity.setCheckFlag(0);
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);
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));
}
@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")
@ApiOperationSupport(order = 2)
@Operation(summary = "协订单收回", description = "")
@ApiLog("协订单 收回")
@Operation(summary = "协订单收回", description = "")
@ApiLog("协订单 收回")
public R oemTakeBack(@Valid @RequestBody OemTakeBack oemTakeBack) {
return workOrderRunService.oemTakeBack(oemTakeBack);
}

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

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

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

@ -12,6 +12,7 @@ import org.springblade.desk.oem.pojo.vo.OemOrderVO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import java.util.List;
import java.util.Map;
/**
* 车间订单运行记录表 Mapper 接口
@ -47,4 +48,7 @@ public interface WorkOrderRunMapper extends BaseMapper<WorkOrderRun> {
*/
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>
</if>
</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>

@ -294,17 +294,33 @@
<select id="getByRfpsId" resultType="org.springblade.desk.produce.pojo.dto.MesRbFilePreserveDetailDTO">
select * ,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
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
where slot.rfp_id =#{rfpsId}
order by a.DETAIL_INDEX asc
</select>
<select id="getByRfpId" resultType="org.springblade.desk.produce.pojo.entity.MesRbFilePreserveSlotEntity">
select a.* from MES_RB_FILE_PRESERVE_SLOT slot
-- left join DS_RB_FILE_PRESERVE slot on a.Id = slot.RFP_ID
inner join QA_PRO_RE_TEMPLATE a on a.Id = slot.RFP_ID
select slot.RFP_ID as rfpId,
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
where slot.RFP_ID =#{rfpId}
</select>

@ -1,5 +1,6 @@
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.metadata.IPage;
import jakarta.annotation.Resource;
@ -134,6 +135,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
if (null == workOrderRun) {
return R.fail("未找到相关外协订单");
}
// 必须是"已下达"状态才能收回
if (!WorkOrderRun.RUN_STATUS_ISSUED.equals(workOrderRun.getRunStatus())) {
return R.fail("外协订单已收回或状态不正确,无法再次操作");
}
// 获取订单信息
WorkOrder workOrder = workOrderMapper.selectById(workOrderRun.getWoId());
if (workOrder == null) {
@ -333,8 +338,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前
if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wp.getNextWpId()));
WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>().eq(WorkPlan::getId, wp.getNextWpId()));
workOrderRun.setInCustomer(nextWp.getOcId());
} else {
workOrderRun.setInCustomer(wp.getOcId());
@ -342,6 +346,52 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//更新车间订单主责任单位
workOrderService.updateHostWorkUnit(wo);
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 {
//转厂内业务
WorkPlan nextWorkPlan;
@ -473,6 +523,44 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
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)
@Override
public R changeOemManufacturer(Long worId, Long ocId) {
@ -551,11 +639,23 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return page.setRecords(approvals);
}
/**
* 查找可交件的最后一道外协工序
* 取第一个非外协未开工序的 front_wp_id
*/
private WorkPlan findDeliverableWorkPlan(List<WorkPlan> workPlans) {
return workPlans.stream()
WorkPlan firstInternalPlan = workPlans.stream()
.filter(plan -> "0".equals(plan.getOem()) && plan.getStatus() == 1)
.min(Comparator.comparing(WorkPlan::getOrders))
.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,
@ -593,6 +693,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
*/
private void updateWorkOrder(WorkOrder workOrder, WorkPlan deliverablePlan,
Integer scrapQty, Integer testQty) {
// 已交接的订单不允许再修改
if (WorkOrder.RUN_STATUS_CRAFT_CHANGE.equals(workOrder.getRunStatus())) {
throw new ServiceException("车间订单已交接,无法再次收回");
}
workOrder.setWpId(deliverablePlan.getId());
workOrder.setRunStatus(3); // 加工中
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.dashboard.pojo.entity.*;
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.IDsPartVersionService;
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.entity.*;
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.WorkPlanExpandVO;
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.wrapper.InspectionTaskListWrapper;
import org.springblade.erpdata.feign.IErpDataCheckerSealClient;
import org.springblade.scheduling.pojo.entity.WorkPlanEntity;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
@ -161,6 +162,14 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
private IWorkPlanItemDetailService workPlanItemDetailService;
@Resource
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
@ -716,16 +725,16 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
partJson.put("cruxMemo", dsPart.getKeyInfo());
partJson.put("memo", dsPart.getRemarks());
partJson.put("area", dsPart.getArea());
if(dsPart.getArea() != null){
if (dsPart.getArea() != null) {
partJson.put("area", roundToSixDecimalPlaces(dsPart.getArea()));
}
}
if (yo != null) {
yoJson.put("productType", yo.getProductType());
yoJson.put("prodIdent", yo.getProductIdent());
yoJson.put("poQty", yo.getYpQty());
yoJson.put("poQty", wo.getMakeQty());
yoJson.put("poArea", yo.getYpArea());
if(yo.getYpArea() != null){
if (yo.getYpArea() != null) {
yoJson.put("poArea", roundToSixDecimalPlaces(yo.getYpArea()));
}
yoJson.put("primaryCraft", yo.getPrimaryCraft());
@ -741,6 +750,7 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
/**
* double保留6为小数四舍五入
*
* @param num
* @return
*/
@ -783,19 +793,10 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
modelTwo.put("procedureSet", procedureSet);
modelTwo.put("slotList", slotList);
modelTwo.put("tankInfo", tankInfo);
List<MesRbFilePreserveSlotEntity> dsRbFilePreserveSlotList = new ArrayList<>();
List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList = new ArrayList<>();
if (WorkPlan.PRINT_TYPE_PROCESS.equals(prWorkPlan.getPrintType())) {
// 同槽信息(从设备,工装使用记录获取)
List<ProduceMonitorSlotListVO> slotVOList = null;
//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);
}
}
List<ProduceMonitorSlotListVO> slotVOList = macToolUseService.listSlotInfo(prWorkPlan);
if (CollectionUtils.isNotEmpty(slotVOList)) {
for (ProduceMonitorSlotListVO slot : slotVOList) {
JSONObject slotJson = new JSONObject();
@ -902,107 +903,87 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
* @param workPlan
* @return
*/
private List<MesRbFilePreserveSlotEntity> buildDsRbFilePreserveSlotList(WorkPlanExpandVO workPlan) {
List<MesRbFilePreserveSlotEntity> dsRbFilePreserveSlotList = new ArrayList<>();
QueryWrapper<CenterTeam> qwteam = new QueryWrapper<>();
qwteam.eq("TS_ID", workPlan.getMakeTeam());
List<CenterTeam> teamList = centerTeamService.list(qwteam);
CenterTeam bsCenterTeam = null;
if (teamList != null && teamList.size() > 0) {
bsCenterTeam = teamList.get(0);
}
if (bsCenterTeam != null && bsCenterTeam.getWcId() != null) {
private List<ProduceMonitorFileSlotVO> buildDsRbFilePreserveSlotList(WorkPlanExpandVO workPlan) {
List<MesQcProduceRunEntity> qcProduceRunsList;
List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList = new ArrayList<>();
BsTeamSetEntity bsTeamSet = bsTeamSetService.getById(workPlan.getMakeTeam());
if (bsTeamSet != null) {
MacToolUse prMacToolUse;
List<MesRbFilePreserveSlotEntity> preserveSlotList;
List<MesQcProduceRunEntity> qcProduceRunsList;
MesQcProduceRunEntity boxInfo = new MesQcProduceRunEntity();
MesQcProduceRunEntity boxInfo;
// 根据电子档案维护组装数据(上线前) 分槽
List<MacToolUse> dataByWpIdAndIndexList = workPlanMapper.getDataByWpIdAndIndexList(workPlan.getId(), "1");
if (dataByWpIdAndIndexList != null && dataByWpIdAndIndexList.size() > 0) {
List<MacToolUse> dataByWpIdAndIndexList = macToolUseService.getDataByWpIdAndIndexList(workPlan.getId(), "1");
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(dataByWpIdAndIndexList)) {
for (MacToolUse prMacToolUseItem : dataByWpIdAndIndexList) {
if (prMacToolUseItem != null && prMacToolUseItem.getId() != null) {
// 获取模板数据
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());
if (runs != null && runs.size() > 0) {
boxInfo = runs.get(0);
}
if (StringUtils.isNotBlank(boxInfo.getInDate())) {
boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId());
if (boxInfo.getInDate() != null) {
qcProduceRunsList.add(boxInfo);
}
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) {
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
// 2025-07-23 线上迁移修改删除了日志打印
// cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan,
dsRbFilePreserveSlotList, prMacToolUseItem);
this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUseItem);
}
}
}
}
// 根据电子档案维护组装数据(自动)
prMacToolUse = workPlanMapper.getDataByWpIdAndIndex(workPlan.getId(), "2");
prMacToolUse = macToolUseService.getDataByWpIdAndIndex(workPlan.getId(), "2");
if (prMacToolUse != null && prMacToolUse.getId() != null) {
List<ProReTemplate> dsRbFilePreserveList = null;
if (workPlan.getPpsId() != null) {
BsProcessSetEntity process = processSetService.getById(workPlan.getPpsId());
if ("喷砂".equals(process.getName()) || "涂色标".equals(process.getName())) {
dsRbFilePreserveList = workPlanMapper.getDataByWcIdAndPpsId(null,
workPlan.getPpsId(), "0");
} else {
dsRbFilePreserveList = workPlanMapper.getDataByWcIdAndPpsId(bsCenterTeam.getWcId(),
workPlan.getPpsId(), "0");
}
// 获取模板数据
List<ProReTemplate> dsRbFilePreserveList;
BsProcessSetEntity processSet = bsProcessSetService.getById(workPlan.getPpsId());
if (workPlan.getPpsId() != null && ("喷砂".equals(processSet.getName()) || "涂色标".equals(processSet.getName()))) {
dsRbFilePreserveList = proReTemplateService.getDataByWcIdAndPpsId(null, workPlan.getPpsId(), Boolean.TRUE);
} else {
dsRbFilePreserveList = proReTemplateService.getDataByWcIdAndPpsId(bsTeamSet.getWcId(), workPlan.getPpsId(), Boolean.TRUE);
}
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);
}
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) {
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
// cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan,
dsRbFilePreserveSlotList, prMacToolUse);
this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUse);
}
}
// 获取额外面积数据
// BsAdditionalMess dataByMtuCode = bsAdditionalMessDao.getDataByOneData(prMacToolUse.getMtnCode(), BsAdditionalMess.TYPE_ONE);
// workPlan.setBsAdditionalMess(dataByMtuCode);
}
// 根据电子档案维护组装数据(线下)
//zxh 20250117 解决单工序绑定两个手动记录只显示一个问题
List<MacToolUse> prMacToolUseList = workPlanMapper.getDataByWpIdAndIndexList(workPlan.getId(), "3");
if (prMacToolUseList != null && prMacToolUseList.size() > 0) {
List<MacToolUse> prMacToolUseList = macToolUseService.getDataByWpIdAndIndexList(workPlan.getId(), "3");
if (prMacToolUseList != null && !prMacToolUseList.isEmpty()) {
for (MacToolUse prMacToolUseSd : prMacToolUseList) {
if (prMacToolUseSd != null && prMacToolUseSd.getId() != null) {
// 获取模板数据
preserveSlotList = workPlanMapper.getByRfpId(Long.valueOf(prMacToolUseSd.getRfpId()));
qcProduceRunsList = workPlanMapper.listPrByWpIdIndexAndMtnCode(workPlan.getId(), 3, prMacToolUseSd.getMtnCode());
preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(prMacToolUseSd.getRfpId()));
qcProduceRunsList = qcProduceRunService.listPrByWpIdIndexAndMtnCode(prMacToolUseList.stream().map(MacToolUse::getMtnCode).toList(), prMacToolUseSd.getMtnCode());
// 烘箱信息(从设备,工装使用记录获取)
List<MesQcProduceRunEntity> runs = workPlanMapper.getBoxInfoByWpIdMtnCodeList(workPlan.getId());
if (runs != null && runs.size() > 0) {
boxInfo = runs.get(0);
}
if (StringUtils.isNotBlank(boxInfo.getInDate())) {
boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId());
if (boxInfo.getInDate() != null) {
qcProduceRunsList.add(boxInfo);
}
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) {
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
// cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan,
dsRbFilePreserveSlotList, prMacToolUseSd);
this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUseSd);
}
}
}
@ -1011,6 +992,381 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
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) {
List<JSONObject> checkList = new ArrayList<>();
//组装检测项集合

@ -61,14 +61,14 @@ public class ErpDataOemClientImpl implements IErpDataOemClient {
}
@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");
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
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");
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.core.tenant.annotation.NonDS;
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.service.IErpDataWmsService;
import org.springblade.wms.pojo.entity.StRealtimeStock;
@ -37,6 +39,11 @@ public class ErpDataWmsClient implements IErpDataWmsClient{
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
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 {
@ -49,8 +56,24 @@ public class ErpDataWmsClient implements IErpDataWmsClient{
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
public R<StGoodsExtStatusVO> getGoodsExtStatus(String 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;
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 java.util.Date;
/**
* @version 1.0
* @program: jonhon-mes-svr
@ -16,4 +20,7 @@ public interface ErpDataWmsMapper extends Mapper {
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}
</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>

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

@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.exception.BusinessException;
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.service.IErpDataWmsService;
import org.springblade.wms.pojo.entity.StRealtimeStock;
@ -125,6 +127,47 @@ public class ErpDataWmsServiceImpl implements IErpDataWmsService {
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
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{
@ -215,9 +258,66 @@ public class ErpDataWmsServiceImpl implements IErpDataWmsService {
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
public StGoodsExtStatusVO getGoodsExtStatus(String 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()));
}
if (CollectionUtils.isEmpty(equipAbilityList)) {
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()) + ",未匹配到对应的设备能力");
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.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order);
isSchecuding = false;
@ -653,7 +653,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (CollectionUtils.isEmpty(equipResourceList)) {
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);
isSchecuding = false;
break;
@ -863,7 +863,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
hourMap.put("totalTime",totalTime);
hourMap.put("standardTime",ability.getStandardTime());
hourMap.put("prepareTime",ability.getPrepareTime());
hourMap.put("hourType",ability.getType());
hourMap.put("hourType",ability.getType() == null ? 0 : ability.getType());
}else{
if("玻璃封接组装".equals(processMap.get(craft.getPpsId()))){//玻璃封接组装单独计算
hourMap = calPersonHoursByBlfjzz(order.getYpQty(),part);
@ -900,8 +900,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (CollectionUtils.isNotEmpty(personResourceList)) {
workPlan.setMakeTeam(personResourceList.get(0).getTeamId());
}else{
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()) + ",未匹配到对应的人员能力");
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.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order);
isSchecuding = false;
@ -918,8 +918,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
} else {
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()) + ",未匹配到对应的人员能力");
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.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order);
isSchecuding = false;
@ -945,9 +945,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlanList.add(workPlan);
log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",人员匹配完成");
} 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());
// 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());
// yieldOrderService.updateById(order);
isSchecuding = false;
@ -963,6 +963,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if(errorInfo.length() > 0){
order.setErrorInfo(errorInfo.toString());
order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
order.setUpdateTime(new Date());
yieldOrderService.updateById(order);
}
continue;
@ -1039,7 +1040,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
yieldOrderService.updateById(order);
workOrderList.add(workOrder);
//生成生产运行记录
disTaskingClient.saveWorkOrderRun(workOrder.getId().toString());
//disTaskingClient.saveWorkOrderRun(workOrder.getId().toString());
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){
StGlassCakeOutDTO glassDto = new StGlassCakeOutDTO();
glassDto.setCardNo(workOrder.getCardNo());

@ -56,9 +56,10 @@ public class StBuyOrderController extends BladeController {
@ApiOperationSupport(order = 1)
@ApiLog("采购申请单 详情")
@Operation(summary = "详情", description = "传入stBuyOrder")
public R<StBuyOrderVO> detail(StBuyOrder stBuyOrder) {
StBuyOrder detail = stBuyOrderService.getOne(Condition.getQueryWrapper(stBuyOrder));
return R.data(StBuyOrderWrapper.build().entityVO(detail));
public R<StBuyOrder> detail(StBuyOrder stBuyOrder) {
// StBuyOrder detail = stBuyOrderService.getOne(Condition.getQueryWrapper(stBuyOrder));
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.wms.excel.StMoldApplyForExcel;
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.vo.StMoldApplyForVO;
import org.springblade.wms.service.IStMoldApplyForService;

@ -100,16 +100,16 @@ public class StWmsRequestController extends BladeController {
return R.status(stWmsRequestService.save(stWmsRequest));
}
// /**
// * 仓库提请记录 修改
// */
// @PostMapping("/update")
// @ApiOperationSupport(order = 5)
// @ApiLog("仓库提请记录 修改")
// @Operation(summary = "修改", description = "传入stWmsRequest")
// public R update(@Valid @RequestBody StWmsRequest stWmsRequest) {
// return R.status(stWmsRequestService.updateByErp(stWmsRequest));
// }
/**
* 仓库提请记录 修改
*/
@PostMapping("/update")
@ApiOperationSupport(order = 5)
@ApiLog("仓库提请记录 修改")
@Operation(summary = "修改", description = "传入stWmsRequest")
public R update(@Valid @RequestBody StWmsRequest stWmsRequest) {
return R.status(stWmsRequestService.updateByErp(stWmsRequest));
}
/**
* 仓库提请提交
@ -158,7 +158,7 @@ public class StWmsRequestController extends BladeController {
@ApiLog("仓库提请记录 删除")
@Operation(summary = "逻辑删除", description = "传入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;
StBuyOrder getDetail(Long id);
// 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 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.desk.common.feign.IMesApprovalRecordClient;
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.IUserClient;
import org.springblade.system.pojo.entity.User;
@ -54,6 +56,8 @@ public class StBuyOrderServiceImpl extends BaseServiceImpl<StBuyOrderMapper, StB
private IUserClient userClient;
@Resource
private ISysClient sysClient;
@Resource
private IErpDataWmsClient erpDataWmsClient;
@Override
public IPage<StBuyOrderVO> selectStBuyOrderPage(IPage<StBuyOrderVO> page, StBuyOrderVO stBuyOrder) {
@ -374,6 +378,27 @@ public class StBuyOrderServiceImpl extends BaseServiceImpl<StBuyOrderMapper, StB
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
// public JSONObject otherPlanDetail(Long boId, String goodsCode) {
//// JSONObject o = (JSONObject) prPlateGoodsRecordWebService.listByRecordDetail(boId,goodsCode);

@ -1,5 +1,6 @@
package org.springblade.wms.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
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.vo.StWmsRequestVO;
import org.springblade.wms.service.IStBuyOrderService;
import org.springblade.wms.service.IStGoodsService;
import org.springblade.wms.service.IStWmsRequestService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -225,19 +225,60 @@ public class StWmsRequestServiceImpl extends BaseServiceImpl<StWmsRequestMapper,
String excNote = (String) param.get("v_excnote");
}
// @Override
// public boolean updateByErp(StWmsRequest stWmsRequest){
//// StBuyOrder stBuyOrder = stBuyOrderService.getById(stWmsRequest.getBoId());
//// StGoods goods = stGoodsMapper.selectById(stBuyOrder.getGoodsId());
//// erpDataWmsClient.createOrReplace(
//// stBuyOrder.getExtraBill(),
//// goods.getGoodsCode(),
//// "0",
//// stWmsRequest.getRequestQty(),
//// stWmsRequest.getRequestQty()
//// );
// return false;
// }
@Override
public boolean updateByErp(StWmsRequest stWmsRequest){
StBuyOrder stBuyOrder = stBuyOrderService.getById(stWmsRequest.getBoId());
StGoods goods = stGoodsMapper.selectById(stBuyOrder.getGoodsId());
StWmsRequest oldRequest = this.getById(stWmsRequest);
try {
erpDataWmsClient.createOrReplace(
stBuyOrder.getExtraBill(),
goods.getGoodsCode(),
"0",
oldRequest.getRequestQty(),
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
public List<StWmsRequestExcel> exportStWmsRequest(Wrapper<StWmsRequest> queryWrapper) {

Loading…
Cancel
Save