Compare commits

...

21 Commits

  1. 4
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 33
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/CalculateCoatingMaterialProcessor.java
  3. 30
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/produce/ReworkNoProcessProcessor.java
  4. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java
  5. 11
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java
  6. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldDemand.java
  7. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/MoldDemandVo.java
  8. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IDisTaskingClient.java
  9. 68
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java
  10. 34
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java
  11. 3
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/ReworkProcessDTO.java
  12. 115
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/MesRbRedoVO.java
  13. 185
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/PpmReportDetailModelVO.java
  14. 6
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/ReworkProcessVO.java
  15. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/CraftAbilityController.java
  16. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkTankController.java
  17. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/excel/WorkTankExcel.java
  18. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/ICraftAbilityService.java
  19. 185
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BsAssignServiceImpl.java
  20. 33
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/CraftAbilityServiceImpl.java
  21. 61
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java
  22. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBindController.java
  23. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java
  24. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java
  25. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskServiceImpl.java
  26. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/MoldDemandController.java
  27. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java
  28. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java
  29. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldApplyMapper.java
  30. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldApplyMapper.xml
  31. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.java
  32. 117
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/MoldDemandMapper.xml
  33. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.java
  34. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.xml
  35. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IMoldApplyService.java
  36. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IMoldDemandService.java
  37. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  38. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/MoldApplyServiceImpl.java
  39. 36
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/MoldDemandServiceImpl.java
  40. 87
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  41. 75
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ReworkProcessController.java
  42. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/DisTaskingClient.java
  43. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  44. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  45. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java
  46. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  47. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/HandoverRecordServiceImpl.java
  48. 305
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java
  49. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  50. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/作业槽.xls
  51. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/分派规则维护.xls
  52. 34
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java
  53. 11
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.java
  54. 72
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.xml
  55. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml
  56. 17
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java
  57. 116
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java
  58. 2
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java
  59. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java
  60. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkPlanController.java
  61. 11
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/UserExtServiceImpl.java
  62. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsMapper.xml
  63. 22
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StBuyOrderServiceImpl.java
  64. 7
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StClassRequestServiceImpl.java
  65. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java
  66. 7
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StWmsRequestServiceImpl.java

@ -31,8 +31,8 @@ public interface LauncherConstant {
/**
* nacos dev 地址
*/
// String NACOS_DEV_ADDR = "192.168.249.27:8848";
String NACOS_DEV_ADDR = "127.0.0.1:8848";
String NACOS_DEV_ADDR = "192.168.249.27:8848";
// String NACOS_DEV_ADDR = "127.0.0.1:8848";
/**R
* nacos prod 地址

@ -0,0 +1,33 @@
package org.springblade.job.processor.dashboard;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.order.feign.IOrderClient;
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;
import java.util.concurrent.CompletableFuture;
/**
* 工艺模块-返工任务
* @author liweidong
*/
@Component
@Data
@Slf4j
public class CalculateCoatingMaterialProcessor implements BasicProcessor {
@Resource
private IOrderClient client;
@Override
public ProcessResult process(TaskContext context) throws Exception {
log.info("镀层物料需求任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()->client.calculateCoatingMaterial());
log.info("镀层物料需求任务结束");
return new ProcessResult(true);
}
}

@ -0,0 +1,30 @@
package org.springblade.job.processor.produce;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.produce.feign.IDisTaskingClient;
import org.springframework.stereotype.Component;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
/**
* 返工无工艺接收
*
* @author litao
*/
@Component
@Data
@Slf4j
public class ReworkNoProcessProcessor implements BasicProcessor {
@Resource
private IDisTaskingClient client;
@Override
public ProcessResult process(TaskContext context) throws Exception {
log.info("返工无工艺定时接收");
return new ProcessResult(client.receiveOrder());
}
}

@ -121,4 +121,10 @@ public interface TaskingConstant {
* 是否是检验工序
*/
Integer IS_CHECKOUT = 1;
/**
* 工艺员角色名称
*/
String RB_CREAT = "rb_craft";
String SJ_CREAT = "sj_craft";
}

@ -15,9 +15,10 @@ import org.springframework.web.bind.annotation.GetMapping;
)
public interface IOrderClient {
String API_PREFIX = "/feign/order/";
String API_PREFIX = "/feign/client/order/";
String SAVE_GLASS_CAKE = API_PREFIX + "/saveGlassCake";
String CALCULATE_COATING_MATERIAL = API_PREFIX + "/calculateCoatingMaterial";
/**
@ -29,4 +30,12 @@ public interface IOrderClient {
@GetMapping(SAVE_GLASS_CAKE)
Boolean saveGlassCake(YieldPlan yieldPlan);
/**
* 镀层物料需求
*
* @return
*/
@GetMapping(CALCULATE_COATING_MATERIAL)
void calculateCoatingMaterial();
}

@ -3,6 +3,8 @@ package org.springblade.desk.order.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.NullSerializer;
import lombok.Data;
import org.springblade.core.mp.base.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;
@ -55,18 +57,21 @@ public class MoldDemand extends BaseEntity {
* 需求数量
*/
@TableField(value = "DEMAND_NUM")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Double demandNum;
/**
* 库存量
*/
@TableField(value = "STOCK_NUM")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer stockNum;
/**
* 占用量
*/
@TableField(value = "OCCUPY_NUM")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer occupyNum;
/**
@ -91,6 +96,7 @@ public class MoldDemand extends BaseEntity {
* 数量
*/
@TableField(value = "QUANTITY")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Long quantity;
/**

@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import org.springblade.desk.order.pojo.entity.MoldDemand;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import java.io.Serial;
import java.util.List;
@ -53,7 +54,7 @@ public class MoldDemandVo extends MoldDemand {
/**
* 关联订单
*/
List<YieldOrderVo> linkOrderList;
List<YieldOrder> linkOrderList;
/**
* 申报记录

@ -17,6 +17,7 @@ public interface IDisTaskingClient {
String API_PREFIX = "/feign/client/disTasking";
String SYNC_DIS_TASKING = API_PREFIX + "/syncDisTasking";
String RECEIVE_ORDER = API_PREFIX + "/receiveOrder";
/**
@ -26,4 +27,9 @@ public interface IDisTaskingClient {
@GetMapping(SYNC_DIS_TASKING)
boolean syncDisTasking();
/**
* 返工无工艺接收
*/
@GetMapping(RECEIVE_ORDER)
boolean receiveOrder();
}

@ -3,6 +3,9 @@ package org.springblade.erpdata.feign;
import org.springblade.common.constant.LauncherConstant;
import org.springblade.core.tool.api.R;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.erpdata.pojo.vo.MesRbRedoVO;
import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springframework.cloud.openfeign.FeignClient;
@ -31,6 +34,12 @@ public interface IErpDataProduceClient {
String CUSTODIAN = API_PREFIX + "/getCustodian";
String CHK_SJJD = API_PREFIX + "/chkSjjd";
String CHK_SHJH = API_PREFIX + "/chkShjh";
String REVIEW_FORM_MESS = API_PREFIX + "/reviewFormMess";
String LOAD_REWORK_PLAN = API_PREFIX + "/loadReworkPlan";
String LOAD_REWORK_PLAN_SIZE = API_PREFIX + "/loadReworkPlanSize";
String COMPLETE_ORDER = API_PREFIX + "/completeOrder";
String RECEIVE_ORDER = API_PREFIX + "/receiveOrder";
String LOAD_REWORK_NO_PROCESS = API_PREFIX + "/loadReworkNoProcess";
/**
* 缺件申报-通过零件号获取批次号
@ -55,6 +64,7 @@ public interface IErpDataProduceClient {
R<Integer> loadReworkOrderSize(@RequestParam(value = "reworkCode", required = false) String reworkCode,
@RequestParam(value = "partCode", required = false) String partCode,
@RequestParam(value = "batchNo", required = false) String batchNo);
/**
* 获取产品区域
*/
@ -84,4 +94,62 @@ public interface IErpDataProduceClient {
*/
@GetMapping(CHK_SHJH)
R<String> chkShjh(@RequestParam("woCode") String woCode, @RequestParam("ypCode") String ypCode, @RequestParam("partCode") String partCode, @RequestParam("productIdent") String productIdent, @RequestParam("makeQty") Double makeQty, @RequestParam("memo") String memo);
/**
* 查询erp审理单
*/
@GetMapping(REVIEW_FORM_MESS)
R<List<PpmReportDetailModelVO>> reviewFormMess(@RequestParam(value = "queryType") Boolean queryType,
@RequestParam(value = "reworkCode", required = false) String reworkCode,
@RequestParam(value = "partCode", required = false) String partCode,
@RequestParam(value = "batchNo", required = false) String batchNo);
/**
* 返工计划查询
*/
@GetMapping(LOAD_REWORK_PLAN)
R<List<MesRbRedoVO>> loadReworkPlan(@RequestParam(value = "reworkCode", required = false) String reworkCode,
@RequestParam(value = "partCode", required = false) String partCode,
@RequestParam(value = "batchNo", required = false) String batchNo,
@RequestParam(value = "current") Integer current,
@RequestParam(value = "size") Integer size);
/**
* 返工计划数量
*/
@GetMapping(LOAD_REWORK_PLAN_SIZE)
R<Integer> loadReworkPlanSize(@RequestParam(value = "reworkCode", required = false) String reworkCode,
@RequestParam(value = "partCode", required = false) String partCode,
@RequestParam(value = "batchNo", required = false) String batchNo);
/**
* 返工订单完成
*/
@GetMapping(COMPLETE_ORDER)
R<Boolean> completeOrder(@RequestParam(value = "redono") String redono,
@RequestParam(value = "seqno") Integer seqno,
@RequestParam(value = "prtno") String prtno,
@RequestParam(value = "splcode") String splcode,
@RequestParam(value = "amount") Double amount,
@RequestParam(value = "bfqty", required = false) Integer bfqty,
@RequestParam(value = "userName", required = false) String userName);
/**
* 返工无工艺
*/
@GetMapping(RECEIVE_ORDER)
R<Boolean> receiveOrder(@RequestParam(value = "redono") String redono,
@RequestParam(value = "seqno") Integer seqno,
@RequestParam(value = "prtno") String prtno,
@RequestParam(value = "splcode") String splcode,
@RequestParam(value = "amount") Double amount,
@RequestParam(value = "reqqty", required = false) String reqqty,
@RequestParam(value = "userName", required = false) String userName,
@RequestParam(value = "reworkgyFlag") int reworkgyFlag);
/**
* 查询返工无工艺订单
*/
@GetMapping(LOAD_REWORK_NO_PROCESS)
R<List<MesRbRedoRoutDTO>> loadReworkNoProcess();
}

@ -1,7 +1,9 @@
package org.springblade.erpdata.feign;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.tool.api.R;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.erpdata.pojo.vo.MesRbRedoVO;
import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springframework.stereotype.Component;
@ -57,4 +59,34 @@ public class IErpDataProduceClientFallback implements IErpDataProduceClient {
public R<String> chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo) {
return R.fail("获取数据失败");
}
@Override
public R<List<PpmReportDetailModelVO>> reviewFormMess(Boolean queryType, String reworkCode, String partCode, String batchNo) {
return R.fail("获取数据失败");
}
@Override
public R<List<MesRbRedoVO>> loadReworkPlan(String reworkCode, String partCode, String batchNo, Integer current, Integer size) {
return R.fail("获取数据失败");
}
@Override
public R<Integer> loadReworkPlanSize(String reworkCode, String partCode, String batchNo) {
return R.fail("获取数据失败");
}
@Override
public R<Boolean> completeOrder(String redono, Integer seqno, String prtno, String splcode, Double amount, Integer bfqty, String userName) {
return R.fail("获取数据失败");
}
@Override
public R<Boolean> receiveOrder(String redono, Integer seqno, String prtno, String splcode, Double amount, String reqqty, String userName, int reworkgyFlag) {
return R.fail("获取数据失败");
}
@Override
public R<List<MesRbRedoRoutDTO>> loadReworkNoProcess() {
return R.fail("获取数据失败");
}
}

@ -22,4 +22,7 @@ public class ReworkProcessDTO {
private Query query;
@Schema(description = "查询类型")
private Boolean queryType;
}

@ -0,0 +1,115 @@
package org.springblade.erpdata.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 返工计划 视图实体类
*
* @author litao
*/
@Data
public class MesRbRedoVO {
/**
* 返修单号
*/
@Schema(description = "返修单号")
private String redono;
/**
* 发生单位
*/
@Schema(description = "发生单位")
private String usedept;
/**
* 物料号
*/
@Schema(description = "物料号")
private String prtno;
/**
* 数量
*/
@Schema(description = "数量")
private String amount;
/**
* 处理意见
*/
@Schema(description = "处理意见")
private String detail;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
/**
* 需求日期
*/
@Schema(description = "需求日期")
private String reqdate;
/**
* 批次号
*/
@Schema(description = "批次号")
private String splcode;
/**
* 生产标识
*/
@Schema(description = "生产标识")
private String prtlotno;
/**
* 审理员
*/
@Schema(description = "审理员")
private String cogncer;
/**
* 审理时间
*/
@Schema(description = "审理时间")
private String cogncdat;
/**
* 型号
*/
@Schema(description = "型号")
private String mtltmrk;
/**
* 承修部门
*/
@Schema(description = "承修部门")
private String prtmdept;
/**
* 完成时间
*/
@Schema(description = "完成时间")
private String udenddat;
/**
* 完成数量
*/
@Schema(description = "完成数量")
private String udtotqty;
/**
* 报废数
*/
@Schema(description = "报废数")
private String udwasqty;
/**
* 返工状态 0:等待1:进行2:完成
*/
@Schema(description = "返工状态 0:等待,1:进行,2:完成")
private Short redostatus;
/**
* 工艺路线生成人
*/
@Schema(description = "工艺路线生成人")
private String routgenman;
/**
* 工艺路线生成时间
*/
@Schema(description = "工艺路线生成时间")
private String routgendat;
/**
* 工艺路线
*/
@Schema(description = "工艺路线")
private String deptcode;
}

@ -0,0 +1,185 @@
package org.springblade.erpdata.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* erp审理单 视图实体类
*
* @author litao
*/
@Data
public class PpmReportDetailModelVO {
/**
* 班组
*/
@Schema(description = "班组")
private String tsName;
/**
* 审理单号
*/
@Schema(description = "审理单号")
private String sheetNo;
/**
* 审理单类型
*/
@Schema(description = "审理单类型")
private String billmodel;
/**
* 审理单状态
*/
@Schema(description = "审理单状态")
private String status;
/**
* 发生单位
*/
@Schema(description = "发生单位")
private String deptcode;
/**
* 物料号
*/
@Schema(description = "物料号")
private String prtno;
/**
* 物料名称
*/
@Schema(description = "物料名称")
private String name;
/**
* 型号
*/
@Schema(description = "型号")
private String type;
/**
* 质量等级
*/
@Schema(description = "质量等级")
private String qstandno;
/**
* 批次号
*/
@Schema(description = "批次号")
private String lotno;
/**
* 总数量
*/
@Schema(description = "总数量")
private String cntt;
/**
* 不合格数
*/
@Schema(description = "不合格数")
private String cntn;
/**
* 检验员
*/
@Schema(description = "检验员")
private String checker;
/**
* 检验日期
*/
@Schema(description = "检验日期")
private String checkdate;
/**
* 归档日期
*/
@Schema(description = "归档日期")
private String finishdate;
/**
* 责任部门
*/
@Schema(description = "责任部门")
private String layer1;
/**
* 审理单开始时间
*/
@Schema(description = "审理单开始时间")
private String judgestart;
/**
*
*/
@Schema(description = "")
private String opinion;
/**
* 审理级别
*/
@Schema(description = "审理级别")
private String userlevel;
/**
* 审理意见
*/
@Schema(description = "审理意见")
private String dispose;
/**
* 审理人
*/
@Schema(description = "审理人")
private String usercode;
/**
* 返修数
*/
@Schema(description = "返修数")
private String p6layer3;
/**
* 返工数
*/
@Schema(description = "返工数")
private String p6layer4;
/**
* 报废数
*/
@Schema(description = "报废数")
private String p6layer5;
/**
* 订单号
*/
@Schema(description = "订单号")
private String sono;
/**
* 完工数
*/
@Schema(description = "完工数")
private String avlqty;
/**
* 完工日期
*/
@Schema(description = "完工日期")
private String date1;
/**
* 责任零件
*/
@Schema(description = "责任零件")
private String p5layer1;
/**
* 责任批次
*/
@Schema(description = "责任批次")
private String p5layer3;
/**
* 发生工序
*/
@Schema(description = "发生工序")
private String process;
/**
* 发生工序名称
*/
@Schema(description = "发生工序名称")
private String processName;
/**
* 上级编号
*/
@Schema(description = "上级编号")
private String precode;
/**
* 返修路线
*/
@Schema(description = "返修路线")
private String reworkLine;
/**
* 故障描述
*/
@Schema(description = "故障描述")
private String memo;
}

@ -20,7 +20,7 @@ public class ReworkProcessVO {
* 路线编号
*/
@Schema(description = "路线编号")
private Integer seqno;
private Integer seqno = 0;
/**
* 处理单位
*/
@ -40,7 +40,7 @@ public class ReworkProcessVO {
* 加工数量
*/
@Schema(description = "加工数量")
private Double amount;
private Double amount = 0d;
/**
* 需求日期
*/
@ -100,7 +100,7 @@ public class ReworkProcessVO {
* 报废数量
*/
@Schema(description = "报废数量")
private Integer bfqty;
private Integer bfqty = 0;
/**
* 发生单位

@ -304,8 +304,8 @@ public class CraftAbilityController extends BladeController {
@GetMapping("/findList")
@ApiOperationSupport(order = 2)
@Operation(summary = "列表", description = "传入CraftAbility")
public R<List<CraftAbilityEntity>> findList() {
List<CraftAbilityEntity> list = craftAbilityService.list();
public R<List<CraftAbilityEntity>> findList(@RequestParam(required = false ,name = "supplierId") String supplierId) {
List<CraftAbilityEntity> list = craftAbilityService.listByParams(supplierId);
return R.data(list);
}

@ -5,6 +5,7 @@ package org.springblade.desk.basic.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -30,8 +31,10 @@ import org.springblade.desk.basic.excel.PlatingSmallExcel;
import org.springblade.desk.basic.excel.WorkTankExcel;
import org.springblade.desk.basic.pojo.entity.Plating;
import org.springblade.desk.basic.pojo.entity.PlatingSmall;
import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.pojo.entity.WorkTank;
import org.springblade.desk.basic.pojo.vo.WorkTankVO;
import org.springblade.desk.basic.service.IWorkCenterService;
import org.springblade.desk.basic.service.IWorkTankService;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.basic.wrapper.WorkTankWrapper;
@ -64,7 +67,8 @@ public class WorkTankController extends BladeController {
private IWorkTankService service;
@Resource
private IUserClient iUserClient;
@Resource
private IWorkCenterService workCenterservice;
/**
* [作业槽] 详情
*/
@ -289,7 +293,13 @@ public class WorkTankController extends BladeController {
List<WorkTank> noticeList = new ArrayList<>();
List<WorkTankExcel> list = ExcelUtil.read(file, WorkTankExcel.class);
list.forEach(noticeExcel -> {
//查询作业中心 设置作业中心ID
WorkCenter workCenter = workCenterservice.getOne(Wrappers.lambdaQuery(WorkCenter.class)
.eq(WorkCenter::getWcName, noticeExcel.getWorkstationName()));
if (cn.hutool.core.bean.BeanUtil.isEmpty(workCenter)){
throw new ArithmeticException("作业槽编码:" + noticeExcel.getWorkTankCode() + "数据," + "未找到作业中心");
}
noticeExcel.setWorkstationId(workCenter.getId());
WorkTank notice = BeanUtil.copy(noticeExcel, WorkTank.class);
List<User> userLeaders = iUserClient.listByNameNolike(noticeExcel.getOpUserName());
if(null != userLeaders && userLeaders.size() > 0){

@ -71,7 +71,11 @@ public class WorkTankExcel implements Serializable {
*/
@ColumnWidth(20)
@ExcelProperty("[作业中心]id")
private BigDecimal workstationId;
private Long workstationId;
@ColumnWidth(20)
@ExcelProperty("作业中心")
private String workstationName;
/**
* 描述
*/

@ -73,4 +73,6 @@ public interface ICraftAbilityService extends BaseService<CraftAbilityEntity> {
* @return
*/
CraftAbilityEntity selectByCaCode(String caCode);
List<CraftAbilityEntity> listByParams(String supplierId);
}

@ -25,6 +25,7 @@
*/
package org.springblade.desk.basic.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -55,6 +56,7 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -80,140 +82,79 @@ public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssig
@Override
public R saveBat(List<BsAssignEntity> addList) {
for (BsAssignEntity current : addList) {
// 获取当前数据的单面积上限
BigDecimal currentUpperArea = current.getUpArea();
// 获取当前数据的单面积下限
BigDecimal currentLowArea = current.getLowArea();
//单批面积上限
BigDecimal singleUpArea = current.getSingleUpArea();
//单批面积下限
BigDecimal singleLowArea = current.getSingleDownArea();
if(currentUpperArea.compareTo(currentLowArea) < 0){
Map<Long, List<BsAssignEntity>> existingGroupByCraft = list().stream()
.collect(Collectors.groupingBy(BsAssignEntity::getCraftAbilityId));
// 校验是否与同工艺能力的已有数据存在区间重叠
for (BsAssignEntity newEntity : addList) {
// 校验单面积区间合理性:上限必须 >= 下限
if (newEntity.getUpArea().compareTo(newEntity.getLowArea()) < 0) {
return R.fail("单面积上限不能小于单面积下限");
}
if(singleUpArea.compareTo(singleLowArea) < 0){
// 校验单批面积区间合理性:上限必须 >= 下限
if (newEntity.getSingleUpArea().compareTo(newEntity.getSingleDownArea()) < 0) {
return R.fail("单批面积上限不能小于单批面积下限");
}
String prodMarkId = current.getProdMarkId();
List<String> names = new ArrayList<>();
List<String> prodMarkIds = Arrays.asList(prodMarkId.split(","));
for (String prodMarkId1 : prodMarkIds){
R<QualityGradeEntity> entity = iWorkOrderClient.getById(Long.parseLong(prodMarkId1));
names.add(entity.getData().getQualityGrade());
// 拼接质量等级名称
String prodMarkNames = parseProdMarkNames(newEntity.getProdMarkId());
newEntity.setProdMark(prodMarkNames);
Long craftId = newEntity.getCraftAbilityId();
// 获取相同工艺能力下的所有已有规则
List<BsAssignEntity> sameCraftEntities = existingGroupByCraft.getOrDefault(craftId, new ArrayList<>());
// 不校验区间是否重叠,校验单面积区间是否完全重复(左右边界都相等)
boolean hasDuplicateSingleArea = sameCraftEntities.stream()
.anyMatch(existing ->
newEntity.getLowArea().compareTo(existing.getLowArea()) == 0 &&
newEntity.getUpArea().compareTo(existing.getUpArea()) == 0
);
if (hasDuplicateSingleArea) {
return R.fail("单面积上下限已存在,请检查数据");
}
String str = names.stream().collect(Collectors.joining(","));
current.setProdMark(str);
}
List<BsAssignEntity> all = new ArrayList<>();
List<BsAssignEntity> list = this.list();
all.addAll(list);
all.addAll(addList);
boolean foundMatch = false;
// 2. 存储已遍历过的数据(用于区间匹配)
List<BsAssignEntity> traversedList = new ArrayList<>();
for (BsAssignEntity current : all) {
// 获取当前数据的单面积上限
BigDecimal currentUpperArea = current.getUpArea();
// 获取当前数据的单面积下限
BigDecimal currentLowArea = current.getLowArea();
//单批面积上限
BigDecimal singleUpArea = current.getSingleUpArea();
//单批面积下限
BigDecimal singleLowArea = current.getSingleDownArea();
Long currentCraftId = current.getCraftAbilityId();
// 检查当前数据的上限是否在已遍历数据的任意区间内
for (BsAssignEntity traversed : traversedList) {
BigDecimal traversedLowerArea = traversed.getLowArea();
BigDecimal traversedUpperArea = traversed.getUpArea();
//单批面积上限
BigDecimal traversedSingleUpArea = traversed.getSingleUpArea();
//单批面积下限
BigDecimal traversedSingleLowArea = traversed.getSingleDownArea();
Long traversedCraftId = traversed.getCraftAbilityId();
if(currentCraftId.equals(traversedCraftId)){
// 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内
if((currentLowArea.compareTo(traversedLowerArea)==1 && currentLowArea.compareTo(traversedUpperArea)==-1)
|| (currentUpperArea.compareTo(traversedLowerArea)==1 && currentUpperArea.compareTo(traversedUpperArea)==-1)){
return R.fail("单面积上下限已存在,请检查数据");
}
if(currentLowArea.compareTo(traversedLowerArea)<=0
&& (currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){
return R.fail("单面积上下限已存在,请检查数据");
}
if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0)
&& currentUpperArea.compareTo(traversedUpperArea)>=0){
return R.fail("单面积上下限已存在,请检查数据");
}
if(currentLowArea.compareTo(traversedLowerArea)<=0
&& currentUpperArea.compareTo(traversedUpperArea)>=0){
return R.fail("单面积上下限已存在,请检查数据");
}
if(currentLowArea.compareTo(traversedLowerArea)==0
&& currentUpperArea.compareTo(traversedUpperArea)==0){
return R.fail("单面积上下限已存在,请检查数据");
}
if((singleLowArea.compareTo(traversedSingleLowArea)==1 && singleLowArea.compareTo(traversedSingleUpArea)==-1) ||
(singleUpArea.compareTo(traversedSingleLowArea)==1 && singleUpArea.compareTo(traversedSingleUpArea)==-1)){
return R.fail("单批面积上下限已存在,请检查数据");
}
if(singleLowArea.compareTo(traversedSingleLowArea)<=0
&& (singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){
return R.fail("单批面积上下限已存在,请检查数据");
}
if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && currentLowArea.compareTo(traversedSingleUpArea)<=0)
&& singleUpArea.compareTo(traversedSingleUpArea)>=0){
return R.fail("单批面积上下限已存在,请检查数据");
}
if(singleLowArea.compareTo(traversedSingleLowArea)<=0
&& singleUpArea.compareTo(traversedSingleUpArea)>=0){
return R.fail("单批面积上下限已存在,请检查数据");
}
if(singleLowArea.compareTo(traversedSingleLowArea)==0 &&
singleUpArea.compareTo(traversedSingleUpArea)==0){
return R.fail("单批面积上下限已存在,请检查数据");
}
}
// 校验单批面积区间是否完全重复(左右边界都相等)
boolean hasDuplicateBatchArea = sameCraftEntities.stream()
.anyMatch(existing ->
newEntity.getSingleDownArea().compareTo(existing.getSingleDownArea()) == 0 &&
newEntity.getSingleUpArea().compareTo(existing.getSingleUpArea()) == 0
);
// if(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0){
// return R.fail("单批面积上限已存在,请检查数据");
// }
if (hasDuplicateBatchArea) {
return R.fail("单批面积上下限已存在,请检查数据");
}
// 未匹配,将当前数据加入已遍历集合,继续下一条
traversedList.add(current);
System.out.println("未匹配到已遍历区间,将当前数据加入已遍历集合");
}
// 保存
return R.status(saveBatch(addList));
}
// 4. 遍历完成后的结果提示
if (!foundMatch) {
System.out.println("\n遍历完成,未发现任何数据的上限落在之前遍历数据的上下限区间内");
return R.status(saveBatch(addList));
private String parseProdMarkNames(String prodMarkId) {
if (prodMarkId == null || prodMarkId.isEmpty()) {
return "";
}
return Arrays.stream(prodMarkId.split(","))
.map(String::trim)
.filter(StrUtil::isNotEmpty)
.map(id -> {
try {
R<QualityGradeEntity> result = iWorkOrderClient.getById(Long.parseLong(id));
return result.getData() != null ? result.getData().getQualityGrade() : "";
} catch (NumberFormatException e) {
//不抛出异常,,,,
return "";
}
})
.filter(name -> !name.isEmpty())
.collect(Collectors.joining(","));
}
// addList.forEach(one -> {
// one.setId(null);
// });
return R.status(true);
/**
* @return true-存在重叠false-不重叠
*/
private boolean isIntervalOverlap(BigDecimal low1, BigDecimal up1, BigDecimal low2, BigDecimal up2) {
return up1.compareTo(low2) >= 0 && low1.compareTo(up2) <= 0;
}
@Override

@ -25,18 +25,25 @@
*/
package org.springblade.desk.basic.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.basic.excel.CraftAbilityExcel;
import org.springblade.desk.basic.mapper.CraftAbilityMapper;
import org.springblade.desk.basic.pojo.entity.Oem;
import org.springblade.desk.basic.pojo.vo.CraftAbilityVO;
import org.springblade.desk.basic.service.ICraftAbilityService;
import org.springblade.desk.basic.service.IOemService;
import org.springblade.scheduling.pojo.entity.CraftAbilityEntity;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 工艺能力 服务实现类
@ -46,7 +53,9 @@ import java.util.List;
*/
@Service
public class CraftAbilityServiceImpl extends BaseServiceImpl<CraftAbilityMapper, CraftAbilityEntity> implements ICraftAbilityService {
@Lazy
@Resource
private IOemService oemService;
@Override
public IPage<CraftAbilityVO> selectCraftAbilityPage(IPage<CraftAbilityVO> page, CraftAbilityVO craftAbility) {
return page.setRecords(baseMapper.selectCraftAbilityPage(page, craftAbility));
@ -72,4 +81,24 @@ public class CraftAbilityServiceImpl extends BaseServiceImpl<CraftAbilityMapper,
return baseMapper.selectByCaCode(caCode);
}
@Override
public List<CraftAbilityEntity> listByParams(String supplierId) {
//供应商id 非必传 根据供应商id查询供应商信息获取工艺能力id字段 工艺能力id以逗号分割 若为空 直接返回
if (StrUtil.isNotEmpty(supplierId)) {
Oem supplier = oemService.getById(supplierId);
if (BeanUtil.isEmpty(supplier) || Objects.isNull(supplier.getCraftAbilityId())) {
return new ArrayList<>();
}
Set<String> craftAbilityIds = Arrays.stream(supplier.getCraftAbilityId().split(","))
.map(String::trim)
.filter(cn.hutool.core.util.StrUtil::isNotEmpty)
.collect(Collectors.toSet());
if (craftAbilityIds.isEmpty()) {
return new ArrayList<>();
}
return listByIds(craftAbilityIds);
}
return list();
}
}

@ -47,6 +47,7 @@ import org.springblade.desk.dashboard.pojo.dto.DsTaskingDTO;
import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.vo.*;
import org.springblade.desk.dashboard.service.*;
import org.springblade.desk.logistics.pojo.vo.TaskVO;
import org.springblade.desk.order.pojo.entity.MoldDemand;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.service.IMoldDemandService;
@ -487,27 +488,12 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
dsTasking.setTaskStatusList(list);
}
String roleName = AuthUtil.getUser().getRoleName();
if("rb_craft".equals(roleName) || "sj_craft".equals(roleName)){
if (roleName != null && (roleName.contains(TaskingConstant.SJ_CREAT) || roleName.contains(TaskingConstant.RB_CREAT))) {
dsTasking.setCraftMan(AuthUtil.getUser().getUserId().toString());
};
}
List<DsTaskingVO> dsTaskingList = baseMapper.selectDisposeList(page, dsTasking);
if(!CollectionUtils.isEmpty(dsTaskingList)){
for (DsTaskingVO dsTaskingVO : dsTaskingList) {
if(org.apache.commons.lang3.StringUtils.isNotEmpty(dsTaskingVO.getCraftMan())){
// 安全获取用户名称
try {
R<UserInfo> userInfoR = userClient.userInfo(Func.toLong(dsTaskingVO.getCraftMan()));
if (userInfoR != null && userInfoR.getData() != null) {
User user = userInfoR.getData().getUser();
if (user != null) {
dsTaskingVO.setCraftMan(user.getRealName());
}
}
} catch (Exception e) {
log.error("获取用户信息失败, userId: {}",dsTaskingVO.getCraftMan(), e);
}
}
String partCode = dsTaskingVO.getPartCode();
String version = dsTaskingVO.getVersion();
DsPartEntity partEntity = partService.selectDsPartByPatCodeAndVersion(partCode,version);
@ -565,8 +551,49 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
}
}
}
// 收集所有需要查询的 userId(去重)
Set<String> userIdSet = dsTaskingList.stream()
.map(DsTaskingVO::getCraftMan)
.filter(Objects::nonNull)
.map(String::valueOf)
.collect(Collectors.toSet());
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(userIdSet)) {
// 批量查询用户信息
String userIds = userIdSet.stream()
.map(String::valueOf)
.collect(Collectors.joining(","));
try {
List<User> userList = userClient.userListByIds(userIds);
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(userList)) {
Map<Long, User> userMap = userList.stream()
.filter(user -> user != null && user.getId() != null)
.collect(Collectors.toMap(
User::getId,
user -> user,
(existing, replacement) -> existing
));
// 批量设置用户名称
for (DsTaskingVO dsTaskingVO : dsTaskingList) {
String craftMan = dsTaskingVO.getCraftMan();
if (craftMan != null) {
User user = userMap.get(Func.toLong(craftMan));
if (user != null) {
dsTaskingVO.setCraftMan(user.getName());
}
}
}
}
} catch (Exception e) {
log.error("批量获取用户信息失败, userIds: {}", userIds, e);
}
}
}
return page.setRecords(dsTaskingList);
}

@ -102,7 +102,7 @@ public class OrderBindController {
public R getBoxbarcodeDetails(@RequestParam String boxBarcode,
@RequestParam boolean isDetail) {
return iOrderBoxService.getBoxbarcodeDetails(boxBarcode,isDetail);
return iOrderBoxService.getBoxbarcodeDetails(boxBarcode,isDetail,null);
}
}

@ -51,7 +51,7 @@ public interface IOrderBoxService {
R getQuantityLocation(String boxBarcode);
R getBoxbarcodeDetails( String boxBarcode,boolean isDetail);
R getBoxbarcodeDetails( String boxBarcode,boolean isDetail,Long taskId);
R getStationNameBoxBarcode(String stationCode);

@ -1092,13 +1092,11 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
* 查询箱条码详细信息
* <p>查询箱条码绑定的订单详情总重量数量工位区域等信息</p>
*
*
* @param orderBindId 订单绑定表ID
* @param boxBarcode 箱条码
* @return R<BoxbarcodeDetailsVO> 箱条码详细信息
*/
@Override
public R getBoxbarcodeDetails(String boxBarcode,boolean isDetail) {
public R getBoxbarcodeDetails(String boxBarcode,boolean isDetail,Long taskId) {
List<OrderBind> orderBindList = null;
String bindBoxBarcode = null;
@ -1107,6 +1105,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
orderBindList = orderBindService.list(
Wrappers.lambdaQuery(OrderBind.class)
.eq(OrderBind::getBoxBarcode, boxBarcode)
.eq(taskId != null, OrderBind::getTaskId, taskId)
);
bindBoxBarcode = boxBarcode;
@ -1287,7 +1286,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
}
// 3. 查询最新任务关联的箱条码详情并填充VO
R boxbarcodeDetailsR = getBoxbarcodeDetails(taskList.get(0).getBoxBarcode(),false);
R boxbarcodeDetailsR = getBoxbarcodeDetails(taskList.get(0).getBoxBarcode(),false,null);
if (!boxbarcodeDetailsR.isSuccess()) {
return boxbarcodeDetailsR;
}

@ -186,7 +186,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
// 任务对应的物料 - 处理空指针
if (StringUtils.isNotEmpty(boxBarcode)) {
R boxbarcodeDetailsR = orderBoxService.getBoxbarcodeDetails(boxBarcode,true);
R boxbarcodeDetailsR = orderBoxService.getBoxbarcodeDetails(boxBarcode,true,taskId);
if (boxbarcodeDetailsR != null && boxbarcodeDetailsR.isSuccess() && boxbarcodeDetailsR.getData() != null) {
taskDetailsVO.setBoxbarcodeDetailsVO((BoxbarcodeDetailsVO) boxbarcodeDetailsR.getData());
}

@ -18,6 +18,7 @@ import org.springblade.desk.order.pojo.enums.MoldDemandEnum;
import org.springblade.desk.order.pojo.vo.MoldDemandVo;
import org.springblade.desk.order.service.IMoldDemandDetailService;
import org.springblade.desk.order.service.IMoldDemandService;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.order.wrapper.MoldDemandWrapper;
import org.springframework.web.bind.annotation.*;
@ -34,6 +35,8 @@ public class MoldDemandController extends BladeController {
private final IMoldDemandService moldDemandService;
private final IMoldDemandDetailService moldDemandDetailService;
private final IYieldOrderService orderService;
/**
* 分页
*/
@ -54,12 +57,9 @@ public class MoldDemandController extends BladeController {
@GetMapping("/detail")
@Operation(summary = "详情", description = "")
public R<MoldDemandVo> detail(String id) {
MoldDemand detail = moldDemandService.getById(id);
MoldDemandVo vo = moldDemandService.detail(id);
MoldDemandVo vo = MoldDemandWrapper.build().entityVO(detail);
vo.setLinkOrderList(null);
vo.setToolUseList(null);
vo.setNearlyApplyList(null);
return R.data(vo);
}

@ -1,6 +1,5 @@
package org.springblade.desk.order.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Operation;
@ -181,6 +180,17 @@ public class YieldOrderController extends BladeController {
return R.status(result);
}
/**
* 订单接收
*/
@PostMapping("/confirm")
@Operation(summary = "订单接收", description = "传入流程卡号")
public R confirm(@Parameter(description = "流程卡号", required = true) @RequestParam String cardNo,
@Parameter(description = "是否场内", required = true) @RequestParam String mark) {
List<YieldOrderCraft> list = yieldOrderService.confirm(cardNo,mark);
return R.data(list);
}
/**
* 批量确认
*/
@ -260,8 +270,8 @@ public class YieldOrderController extends BladeController {
@PostMapping(value = "/receiveOrderFromOldMes")
@Operation(summary = "保存旧mes传过来的生产订单", description = "")
public R receiveOrderFromOldMes(@RequestBody JSONObject dataObject) {
JSONArray dataList = dataObject.getJSONArray("dataList");
yieldOrderService.receiveOrderFromOldMes(dataList);
// JSONArray dataList = dataObject.getJSONArray("dataList");
// yieldOrderService.receiveOrderFromOldMes(dataList);
return R.success();
}
@ -274,7 +284,7 @@ public class YieldOrderController extends BladeController {
@PostMapping(value = "/receiveOrderStatusFromOldMes")
@Operation(summary = "保存旧mes传过来的生产订单状态数据", description = "")
public R receiveOrderStatusFromOldMes(@RequestBody JSONObject entity) {
yieldOrderService.receiveOrderStatusFromOldMes(entity.getString("cardNo"), entity.getInteger("status"));
// yieldOrderService.receiveOrderStatusFromOldMes(entity.getString("cardNo"), entity.getInteger("status"));
return R.success();
}

@ -29,6 +29,7 @@ import io.swagger.v3.oas.annotations.Hidden;
import lombok.RequiredArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.order.service.IYieldPlanService;
import org.springframework.web.bind.annotation.RestController;
@ -44,10 +45,16 @@ import org.springframework.web.bind.annotation.RestController;
public class OrderClient implements IOrderClient {
private final IYieldPlanService yieldPlanService;
private final IYieldOrderService orderService;
@Override
public Boolean saveGlassCake(YieldPlan yieldPlan) {
yieldPlanService.saveGlassCake(yieldPlan);
return null;
}
@Override
public void calculateCoatingMaterial() {
orderService.calculateCoatingMaterial();
}
}

@ -31,4 +31,6 @@ public interface MoldApplyMapper extends BaseMapper<MoldApply> {
* @return
*/
List<MoldApply> pageNearlyMonth(IPage page, MoldApply entity);
MoldApply getDetailByPartCode(String partCode);
}

@ -33,4 +33,12 @@
AND TOOL_CODE LIKE CONCAT('%', CONCAT(#{entity.toolCode}, '%'))
</if>
</select>
<select id = "getDetailByPartCode" resultType = "org.springblade.desk.order.pojo.entity.MoldApply">
select * from (
SELECT <include refid = "baseCommonFields" />
FROM MES_MOLD_APPLY
where part_code = #{partCode}
order by create_time desc) where rownum = 1
</select>
</mapper>

@ -31,4 +31,6 @@ public interface MoldDemandMapper extends BaseMapper<MoldDemand> {
* @return
*/
List<MoldDemand> pageNearlyMonth(IPage page, MoldDemand entity);
MoldDemand getDetailById(String id);
}

@ -10,14 +10,63 @@
</sql>
<select id = "selectPage" resultType = "org.springblade.desk.order.pojo.entity.MoldDemand">
SELECT <include refid = "baseCommonFields" />
FROM MES_MOLD_DEMAND
WHERE IS_DELETED = 0
<if test = "entity.partCode != null and entity.partCode != ''">
AND PART_CODE LIKE CONCAT('%', CONCAT(#{entity.partCode}, '%'))
SELECT
a.ID,
a.TENANT_ID,
a.CREATE_USER,
a.CREATE_TIME,
a.CREATE_DEPT,
a.UPDATE_USER,
a.UPDATE_TIME,
a.STATUS,
a.IS_DELETED,
a.MD_CODE,
a.PART_CODE,
a.PART_NAME,
a.TOOL_CODE,
a.TOOL_NAME,
a.DEMAND_NUM,
a.PLAN_TYPE_CODE,
a.PLAN_TYPE_NAME,
a.NEED_DATE,
a.QUA_LEVEL,
a.MAF_TYPE,
a.KEEPER,
a.RELEASER,
a.MEMO,
a.LINK_ORDER_IDS,
a.MO_CODE,
a.MO_NAME,
a.QUANTITY,
a.YP_ID,
a.ERP_ID,
a.ERP_WO_CODE,
a.MAF_STATUS,
a.URGENT_TYPE,
b.STOCK_NUM,
b.OCCUPY_NUM
FROM
MES_MOLD_DEMAND a
LEFT JOIN (
SELECT
a.goods_id,
b.GOODS_CODE,
sum( a.QUANTITY ) AS STOCK_NUM,
sum( a.OCCUPY_QUANTITY ) AS OCCUPY_NUM
FROM
ST_REALTIME_STOCK a
LEFT JOIN ST_GOODS b ON a.GOODS_ID = b.id
GROUP BY
a.GOODS_ID,
b.GOODS_CODE
) b ON a.PART_CODE = b.GOODS_CODE
WHERE
IS_DELETED = 0
<if test = "entity.partCode != null and entity.partCode != ''">
AND a.PART_CODE LIKE CONCAT('%', CONCAT(#{entity.partCode}, '%'))
</if>
<if test = "entity.toolCode != null and entity.toolCode != ''">
AND TOOL_CODE LIKE CONCAT('%', CONCAT(#{entity.toolCode}, '%'))
AND a.TOOL_CODE LIKE CONCAT('%', CONCAT(#{entity.toolCode}, '%'))
</if>
</select>
@ -32,4 +81,60 @@
AND TOOL_CODE LIKE CONCAT('%', CONCAT(#{entity.toolCode}, '%'))
</if>
</select>
<select id = "getDetailById" resultType = "org.springblade.desk.order.pojo.entity.MoldDemand">
SELECT
a.ID,
a.TENANT_ID,
a.CREATE_USER,
a.CREATE_TIME,
a.CREATE_DEPT,
a.UPDATE_USER,
a.UPDATE_TIME,
a.STATUS,
a.IS_DELETED,
a.MD_CODE,
a.PART_CODE,
a.PART_NAME,
a.TOOL_CODE,
a.TOOL_NAME,
a.DEMAND_NUM,
a.PLAN_TYPE_CODE,
a.PLAN_TYPE_NAME,
a.NEED_DATE,
a.QUA_LEVEL,
a.MAF_TYPE,
a.KEEPER,
a.RELEASER,
a.MEMO,
a.LINK_ORDER_IDS,
a.MO_CODE,
a.MO_NAME,
a.QUANTITY,
a.YP_ID,
a.ERP_ID,
a.ERP_WO_CODE,
a.MAF_STATUS,
a.URGENT_TYPE,
b.STOCK_NUM,
b.OCCUPY_NUM
FROM
MES_MOLD_DEMAND a
LEFT JOIN (
SELECT
a.goods_id,
b.GOODS_CODE,
sum( a.QUANTITY ) AS STOCK_NUM,
sum( a.OCCUPY_QUANTITY ) AS OCCUPY_NUM
FROM
ST_REALTIME_STOCK a
LEFT JOIN ST_GOODS b ON a.GOODS_ID = b.id
GROUP BY
a.GOODS_ID,
b.GOODS_CODE
) b ON a.PART_CODE = b.GOODS_CODE
WHERE
IS_DELETED = 0
and a.id = #{id}
</select>
</mapper>

@ -40,4 +40,6 @@ public interface YieldOrderMapper extends BaseMapper<YieldOrder> {
List<YieldOrderEnum> yieldTypeList, List<YieldOrderEnum> yieldStatusList);
Long getWcId(Long orderId);
YieldOrder getMaxByCodePattern(String codePattern);
}

@ -112,4 +112,14 @@
WHERE yo.ID = #{orderId}
AND ROWNUM = 1;
</select>
<select id="getMaxByCodePattern" resultType="org.springblade.desk.order.pojo.entity.YieldOrder">
SELECT *
FROM(
SELECT *
FROM MES_YIELD_ORDER
WHERE IS_DELETED = 0 AND YO_CODE LIKE CONCAT(#{codePattern}, '%')
ORDER BY YO_CODE DESC
)
WHERE ROWNUM = 1
</select>
</mapper>

@ -71,4 +71,6 @@ public interface IMoldApplyService extends BaseService<MoldApply> {
String keeper,
String createMan,
String memo);
MoldApply getDetailByPartCode(String partCode);
}

@ -3,6 +3,7 @@ package org.springblade.desk.order.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.order.pojo.entity.MoldDemand;
import org.springblade.desk.order.pojo.vo.MoldDemandVo;
import java.util.List;
@ -36,4 +37,7 @@ public interface IMoldDemandService extends BaseService<MoldDemand> {
* @return
*/
boolean createByOderId(String orderId);
MoldDemandVo detail(String id);
}

@ -8,6 +8,7 @@ import org.springblade.core.mp.base.BaseService;
import org.springblade.core.tool.api.R;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
import org.springblade.desk.order.pojo.entity.YieldPlan;
import java.util.List;
@ -278,5 +279,15 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
*/
void saveOrder(List<YieldOrder> yieldOrderList);
String nextBatchNo();
String nextCardNo();
String nextCode(Object obj);
List<String> getToolByPartCode(String partCode);
void calculateCoatingMaterial();
List<YieldOrderCraft> confirm(String cardNo,String mark);
}

@ -86,4 +86,9 @@ public class MoldApplyServiceImpl extends BaseServiceImpl<MoldApplyMapper, MoldA
return "";
}
@Override
public MoldApply getDetailByPartCode(String partCode) {
return baseMapper.getDetailByPartCode(partCode);
}
}

@ -1,19 +1,32 @@
package org.springblade.desk.order.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.order.mapper.MoldDemandMapper;
import org.springblade.desk.order.pojo.entity.MoldApply;
import org.springblade.desk.order.pojo.entity.MoldDemand;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.enums.MoldDemandEnum;
import org.springblade.desk.order.pojo.vo.MoldApplyVo;
import org.springblade.desk.order.pojo.vo.MoldDemandVo;
import org.springblade.desk.order.service.IMoldApplyService;
import org.springblade.desk.order.service.IMoldDemandService;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.order.service.IYieldPlanService;
import org.springblade.desk.order.wrapper.MoldApplyWrapper;
import org.springblade.desk.order.wrapper.MoldDemandWrapper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 服务实现类
@ -27,6 +40,7 @@ public class MoldDemandServiceImpl extends BaseServiceImpl<MoldDemandMapper, Mol
private final IDsPartService dsPartService;
private final IYieldPlanService planService;
private final IYieldOrderService orderService;
private final IMoldApplyService moldApplyService;
@Override
public IPage<MoldDemand> selectPage(IPage<MoldDemand> page, MoldDemand entity) {
@ -97,4 +111,26 @@ public class MoldDemandServiceImpl extends BaseServiceImpl<MoldDemandMapper, Mol
// return this.save(planList);
return true;
}
@Override
public MoldDemandVo detail(String id) {
MoldDemand detail = baseMapper.getDetailById(id);
MoldDemandVo vo = MoldDemandWrapper.build().entityVO(detail);
if(StringUtils.isNotEmpty(vo.getLinkOrderIds())){
List<Long> orderIdList = Arrays.stream(vo.getLinkOrderIds().split(","))
.map(String::trim)
.filter(s ->!s.isEmpty())
.map(Long::valueOf)
.collect(Collectors.toList());
List<YieldOrder> orderList = orderService.list(Wrappers.<YieldOrder>lambdaQuery().in(BaseEntity::getId,orderIdList));
vo.setLinkOrderList(orderList);
}
MoldApply moldApply = moldApplyService.getDetailByPartCode(detail.getPartCode());
MoldApplyVo moldApplyVo = MoldApplyWrapper.build().entityVO(moldApply);
List<MoldApplyVo> moldApplyList = new ArrayList<>();
moldApplyList.add(moldApplyVo);
vo.setToolUseList(null);
vo.setNearlyApplyList(moldApplyList);
return vo;
}
}

@ -35,10 +35,7 @@ import org.springblade.desk.order.constant.YieldOrderConst;
import org.springblade.desk.order.mapper.MoldDemandMapper;
import org.springblade.desk.order.mapper.YieldOrderMapper;
import org.springblade.desk.order.mapper.YieldPlanMapper;
import org.springblade.desk.order.pojo.entity.MoldDemand;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.pojo.entity.*;
import org.springblade.desk.order.pojo.enums.MoldDemandEnum;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.pojo.vo.LineMemoVo;
@ -53,7 +50,11 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@ -374,7 +375,6 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
DsCraftEntity craft = craftVO.getCraft();
DsPartEntity part = dsPartService.getById(craft.getPartId());
//石墨模不参与验证
if (YieldOrderEnum.YIELD_TYPE_2.getCode() != yieldOrder.getYieldType()
&& YieldOrderEnum.YIELD_TYPE_6.getCode() != yieldOrder.getYieldType() && ObjectUtil.isEmpty(part.getArea())) {
@ -450,6 +450,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString()));
moldDemandMapper.updateById(moldDemand);
}
yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum()));
this.updateById(yieldOrder);
}
}
@ -478,7 +480,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString()));
moldDemandMapper.updateById(moldDemand);
}
yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum()));
this.updateById(yieldOrder);
}
}
return Boolean.TRUE;
@ -1017,6 +1020,39 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return list;
}
@Override
public void calculateCoatingMaterial() {
LocalDate today = LocalDate.now();
LocalDateTime startOfDay = today.atStartOfDay();
LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
LambdaQueryWrapper<YieldOrder> wrapper = Wrappers.<YieldOrder>query().lambda()
.between(YieldOrder::getReceiveTime,
DateUtil.toDate(startOfDay),
DateUtil.toDate(endOfDay)).isNull(YieldOrder::getGoodsDemand);
List<YieldOrder> list = this.list(wrapper);
if(CollectionUtils.isNotEmpty(list)){
for(YieldOrder yieldOrder : list){
plateGoodsRecordService.calculateCoatingMaterial(yieldOrder);
}
}
}
@Override
public List<YieldOrderCraft> confirm(String cardNo,String mark) {
YieldOrder yieldOrder = this.getOne(Wrappers.<YieldOrder>lambdaQuery().eq(YieldOrder::getCardNo,cardNo));
if(yieldOrder != null){
if("1".equals(mark)){
yieldOrder.setSiteWork(true);
}
boolean result = this.verifyYieldOrderResource(yieldOrder);
if(result){
List<YieldOrderCraft> list = yieldOrderCraftService.list(Wrappers.<YieldOrderCraft>lambdaQuery().eq(YieldOrderCraft::getYoId,yieldOrder.getId()));
return list;
}
}
return new ArrayList<>();
}
/**
* 验证零件子件信息
*
@ -1150,7 +1186,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len);
}
private String nextCardNo() {
@Override
public String nextCardNo() {
// 自增总长度
int len = 5;
String codePattern = "R" + DateUtil.today() + StringPrefixUtils.prefix(String.valueOf(new Random().nextInt(10000)), "0", len);
@ -1180,7 +1217,9 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
num++;
return num;
}
private String nextBatchNo() {
@Override
public String nextBatchNo() {
// 自增总长度
int len = 3;
@ -1227,7 +1266,11 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
private Integer judgeRank(YieldOrder yieldOrder) {
DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), yieldOrder.getPartVersion());
if(part == null){
throw new ServiceException("未查询到零件信息!");
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("未查询到零件信息!");
this.updateById(yieldOrder);
return null;
}
// 工作订单备注中包含大小写的HTBY时,执行二级工艺
if (yieldOrder.getYpMemo() != null && yieldOrder.getYpMemo().toLowerCase(Locale.ROOT).contains("htby")) {
@ -1274,4 +1317,30 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return null;
}
@Override
public String nextCode(Object obj) {
// 自增总长度
int len = 2;
// 自增值
Integer num = null;
// 编码模式
String codePattern = obj.toString() + "-B";
// 当前模式下最大编码
YieldOrder yieldOrder = baseMapper.getMaxByCodePattern(codePattern);
if (yieldOrder != null) {
num = Integer.parseInt(yieldOrder.getYoCode().substring(codePattern.length()));
}
if (num == null) {
num = 0;
}
num++;
// 下个编码
return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len);
}
}

@ -5,7 +5,6 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
@ -16,6 +15,8 @@ import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.desk.produce.service.IPdaSaveService;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.erpdata.pojo.dto.ReworkProcessDTO;
import org.springblade.erpdata.pojo.vo.MesRbRedoVO;
import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springframework.web.bind.annotation.*;
@ -39,38 +40,8 @@ public class ReworkProcessController extends BladeController {
@GetMapping("/loadReworkOrder")
@ApiOperationSupport(order = 1)
@Operation(summary = "erp查询返工订单", description = "传入ReworkProcessDTO")
@Operation(summary = "erp查询返工订单", description = "传入ReworkProcessDTO")
public R<IPage<ReworkProcessVO>> page(ReworkProcessDTO prReworkProcess, Query query) {
// prReworkProcess.setQuery(query);
// IPage<ReworkProcessVO> page = Condition.getPage(query);
// List<ReworkProcessVO> records = new ArrayList<>();
// ReworkProcessVO reworkProcessVO = new ReworkProcessVO();
// reworkProcessVO.setRedono("返修单号");
// reworkProcessVO.setSeqno(1);
// reworkProcessVO.setSeqdept("处理单位");
// reworkProcessVO.setPrtno("物料号");
// reworkProcessVO.setExcstatus(1);
// reworkProcessVO.setAmount(1.0);
// reworkProcessVO.setReqdate("2026-02-04");
// reworkProcessVO.setReqqty("需求数量");
// reworkProcessVO.setRecdate("2026-02-04");
// reworkProcessVO.setRecman("接收人");
// reworkProcessVO.setRecqty("接收数量");
// reworkProcessVO.setEnddat("2026-02-04");
// reworkProcessVO.setEndman("完成人");
// reworkProcessVO.setEndqty("完成数量");
// reworkProcessVO.setSplcode("批次号");
// reworkProcessVO.setRemark("备注");
// reworkProcessVO.setHrecdate("2026-02-04");
// reworkProcessVO.setBfqty(1);
// reworkProcessVO.setUsedept("发生单位");
// reworkProcessVO.setDetail("处理意见");
// reworkProcessVO.setPrtlotno("生产标识");
// reworkProcessVO.setDeptcode("工艺路线");
// reworkProcessVO.setSono("开单车间订单号");
// records.add(reworkProcessVO);
// page.setRecords(records);
// return R.data(page);
IPage<ReworkProcessVO> iPage = Condition.getPage(query);
List<ReworkProcessVO> process = erpDataProduceClient.loadReworkOrder(prReworkProcess.getReworkCode(), prReworkProcess.getPartCode(), prReworkProcess.getBatchNo(), query.getCurrent(), query.getSize()).getData();
iPage.setRecords(process);
@ -79,27 +50,37 @@ public class ReworkProcessController extends BladeController {
return R.data(iPage);
}
// @GetMapping("/treeProcess")
// @ApiOperationSupport(order = 2)
// @Operation(summary = "查询返工工序树", description = "")
// public R taskComplete(@RequestBody ReworkProcessDTO prReworkProcess) {
// return R.data(reworkProcessService.treeProcess(prReworkProcess));
// }
@PostMapping("/receiveOrder")
@ApiOperationSupport(order = 2)
@Operation(summary = "订单接收", description = "传入prReworkProcess")
public R receiveOrder(@Valid @RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) {
pdaSaveService.receiveOrder(mesRbRedoRoutDTO);
return R.success();
@Operation(summary = "订单接收", description = "传入prReworkProcess")
public R receiveOrder(@RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) {
return R.status(pdaSaveService.receiveOrder(mesRbRedoRoutDTO));
}
@PostMapping("/completeOrder")
@ApiOperationSupport(order = 3)
@Operation(summary = "订单完成", description = "传入mesRbRedoRoutDTO")
public R completeOrder(@Valid @RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) {
pdaSaveService.completeOrder(mesRbRedoRoutDTO, AuthUtil.getUser().getUserName());
return R.success();
@Operation(summary = "订单完成", description = "传入mesRbRedoRoutDTO")
public R completeOrder(@RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) {
return R.status(pdaSaveService.completeOrder(mesRbRedoRoutDTO, AuthUtil.getUserName()));
}
@GetMapping("/reviewFormMess")
@ApiOperationSupport(order = 4)
@Operation(summary = "查询erp审理单")
public R<List<PpmReportDetailModelVO>> reviewFormMess(ReworkProcessDTO prReworkProcess) {
return erpDataProduceClient.reviewFormMess(prReworkProcess.getQueryType(), prReworkProcess.getReworkCode(), prReworkProcess.getPartCode(), prReworkProcess.getBatchNo());
}
@GetMapping("/loadReworkPlan")
@ApiOperationSupport(order = 5)
@Operation(summary = "返工计划查询")
public R<IPage<MesRbRedoVO>> loadReworkPlan(ReworkProcessDTO prReworkProcess, Query query) {
IPage<MesRbRedoVO> iPage = Condition.getPage(query);
List<MesRbRedoVO> process = erpDataProduceClient.loadReworkPlan(prReworkProcess.getReworkCode(), prReworkProcess.getPartCode(), prReworkProcess.getBatchNo(), query.getCurrent(), query.getSize()).getData();
iPage.setRecords(process);
int size = erpDataProduceClient.loadReworkPlanSize(prReworkProcess.getReworkCode(), prReworkProcess.getPartCode(), prReworkProcess.getBatchNo()).getData();
iPage.setTotal(size);
return R.data(iPage);
}
}

@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.Hidden;
import lombok.RequiredArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.desk.produce.service.IDisTaskingService;
import org.springblade.desk.produce.service.IPdaSaveService;
import org.springframework.web.bind.annotation.RestController;
/**
@ -19,8 +20,15 @@ public class DisTaskingClient implements IDisTaskingClient {
private final IDisTaskingService disTaskingService;
private final IPdaSaveService pdaSaveServiceImpl;
@Override
public boolean syncDisTasking() {
return disTaskingService.syncDisTasking(false);
}
@Override
public boolean receiveOrder() {
return pdaSaveServiceImpl.receiveNoProcessOrder();
}
}

@ -60,4 +60,6 @@ public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
List<WorkOrder> listByYoId(Long fatherYoId);
List<WorkInProcessVO> getWorkInProcessByPartCode(Set<String> partCodes);
WorkOrder getWorkOrderUniqueRec(String prtno, String splcode, String sono);
}

@ -235,5 +235,29 @@
AND a.last_instore_time IS NULL
AND a.run_status &lt; 19;
</select>
<select id="getWorkOrderUniqueRec" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT
*
FROM
(SELECT
mwo.*
FROM
MES_WORK_ORDER mwo
INNER JOIN MES_YIELD_ORDER myo ON mwo.YO_ID = myo.ID
INNER JOIN MES_WORK_ORDER_RUN mwor ON mwo.WOR_ID = mwor.ID
WHERE
myo.PART_CODE = #{prtno} AND myo.BATCH_NO = #{splcode}
<choose>
<when test="sono != null and sono != ''">
AND mwor.WO_CODE = #{sono}
</when>
<otherwise>
AND mwo.REWORK_CODE IS NULL
</otherwise>
</choose>
AND mwo.RUN_STATUS != 15 AND mwo.RUN_STATUS != 17
ORDER BY mwo.CREATE_TIME DESC )
WHERE ROWNUM = 1
</select>
</mapper>

@ -4,7 +4,6 @@ import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.dto.DeviceBindDTO;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO;
import org.springblade.desk.produce.pojo.entity.MacToolUse;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.vo.MacToolUseVO;
import org.springblade.desk.produce.pojo.vo.SjEcBingCardVo;
@ -55,11 +54,13 @@ public interface IPdaSaveService extends BaseService<WorkPlan> {
*/
void sjDeviceUnBind(UnBingDeviceVo unBingDeviceVo);
void receiveOrder(MesRbRedoRoutDTO mesRbRedoRoutDTO);
boolean receiveOrder(MesRbRedoRoutDTO mesRbRedoRoutDTO);
void completeOrder(MesRbRedoRoutDTO mesRbRedoRoutDTO, String user);
boolean completeOrder(MesRbRedoRoutDTO mesRbRedoRoutDTO, String user);
void uploadPlan(List<WorkPlan> workPlanList);
void shiftTransfer(ShiftTransferDTO shiftTransferDTO);
boolean receiveNoProcessOrder();
}

@ -232,4 +232,8 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
void addWorkOrder(WorkOrder newWo);
Map<String, List<WorkInProcessVO>> getWorkInProcessByPartCode(Set<String> partCodes);
WorkOrder getWorkOrderUniqueRec(String prtno, String splcode, String sono);
List<WorkOrder> findCubByYoId(Long yoId);
}

@ -192,10 +192,10 @@ public class HandoverRecordServiceImpl extends BaseServiceImpl<HandoverRecordMap
hr.setRecDept(workOrder.getUseDept());
hr.setStatus(HandoverRecord.RUN_STATUS_WAIT);
// excflag = erpDataProduceClient.chkSjjd(yo.getYpCode(), yo.getBatchNo()).getData();
// if ("3500".equals(yo.getUseDeptCode()) || "3502".equals(yo.getUseDeptCode()) || "3507".equals(yo.getUseDeptCode()) || "3512".equals(yo.getUseDeptCode())) {
// shjhflag = erpDataProduceClient.chkShjh(woCode, yo.getYpCode(), yo.getPartCode(), yo.getProductIdent(), workOrder.getMakeQty(), woCode).getData();
// }
excflag = erpDataProduceClient.chkSjjd(yo.getYpCode(), yo.getBatchNo()).getData();
if ("3500".equals(yo.getUseDeptCode()) || "3502".equals(yo.getUseDeptCode()) || "3507".equals(yo.getUseDeptCode()) || "3512".equals(yo.getUseDeptCode())) {
shjhflag = erpDataProduceClient.chkShjh(woCode, yo.getYpCode(), yo.getPartCode(), yo.getProductIdent(), workOrder.getMakeQty(), woCode).getData();
}
//zxh 20250721 首件鉴定仅限制入库单
if ("0".equals(excflag) && hr.getHrType().equals(HandoverRecord.HR_TYPE_IN_WAREHOUSE)) {
throw new ServiceException("订单存在首件鉴定未审核,不允许入库");

@ -6,16 +6,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.entity.PrReworkProcessEntity;
import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.service.*;
import org.springblade.desk.device.pojo.entity.EquipmentEntity;
import org.springblade.desk.device.pojo.entity.FeiBaSetEntity;
@ -24,6 +24,9 @@ import org.springblade.desk.device.service.IEquipmentService;
import org.springblade.desk.device.service.IFeiBaSetService;
import org.springblade.desk.device.service.IRackSetService;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.service.IYieldOrderCraftService;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkPlanMapper;
import org.springblade.desk.produce.pojo.dto.DeviceBindDTO;
@ -36,12 +39,21 @@ import org.springblade.desk.produce.pojo.vo.SjEcBingCardVo;
import org.springblade.desk.produce.pojo.vo.UnBingDeviceVo;
import org.springblade.desk.produce.pojo.vo.UnBingVo;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
import org.springblade.desk.quality.pojo.entity.ReviewSheet;
import org.springblade.desk.quality.service.IInspectionTaskService;
import org.springblade.desk.quality.service.IReviewSheetService;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@ -55,6 +67,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan> implements IPdaSaveService {
private static DateTimeFormatter defaultDateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private final IBsProcedureTeamService bsProcedureTeamService;
private final IBsProcessSetService bsProcessSetService;
@ -79,6 +93,18 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
private final IDsPartService dsPartService;
private final IReviewSheetService reviewSheetService;
private final IInspectionTaskService inspectionTaskService;
@Resource
private IErpDataProduceClient erpDataProduceClient;
@Resource
private IUserClient userClient;
private final IYieldOrderCraftService yieldOrderCraftService;
@Override
@Transactional(rollbackFor = Exception.class)
public void bindingCard(DeviceBindDTO deviceBindDTO) {
@ -486,161 +512,115 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
}
@Override
public void receiveOrder(MesRbRedoRoutDTO rr) {
// 如果路线编号为 1 ,自动完成订单
@Transactional(rollbackFor = Exception.class)
public boolean receiveOrder(MesRbRedoRoutDTO rr) {
// 如果路线编号为1,自动完成订单
if ("1".equals(rr.getSeqno().toString())) {
this.completeOrder(rr, AuthUtil.getUserName());
}
String memo = "";
List<PrReworkProcessEntity> rpList = dsPartService.selectReworkPartCraft(rr.getPrtno(), rr.getRedono(), rr.getSplcode(), String.valueOf(rr.getSeqno()));
if (rpList == null && rpList.isEmpty()) {
if (CollectionUtils.isEmpty(rpList)) {
//修改erp返工单工艺状态为无工艺
//prReworkProcessDao.receiveOrder(rr, user.getLdapName(), 0);
log.info("修改erp返工单工艺状态为无工艺,返工单号{}", rr.getRedono());
return erpDataProduceClient.receiveOrder(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode(), rr.getAmount(), rr.getReqqty(), AuthUtil.getUserName(), 0).getData();
} else {
//查询原订单
WorkOrder wo = workOrderService.getOne(Wrappers.<WorkOrder>lambdaQuery().eq(WorkOrder::getBatchNo, rr.getSplcode()));
if (wo == null) {
wo = workOrderService.getOne(Wrappers.<WorkOrder>lambdaQuery().eq(WorkOrder::getBatchNo, rr.getSplcode()));
}
memo = memo + "物料号:" + rr.getPrtno() + "批次号:" + rr.getSplcode() + " 订单号:" + rr.getSono() + " ---- ";
YieldOrder yieldOrder;
WorkOrder newWo = new WorkOrder();
//zxh 20250820 返修发现部门为3400的才进行原单覆盖
if (wo != null && "3400".equals(rr.getUsedept())) {
memo = memo + "找到原单,woId:" + wo.getId() + " ---- ";
yieldOrder = yieldOrderService.getById(wo.getYoId());
List<WorkPlan> wpList = null;
//返工路线是3400-3400内部返工的,需要COPY原订单且不更新上账时间和上账人,反之则走非车间内部返工处理
if (StringUtils.isNotBlank(rr.getDeptcode()) && "3400-3400".equals(rr.getDeptcode().trim())) {
//顺延原WO号
newWo.setWoCode(workOrderService.nextCode(yieldOrder.getYpCode()));
newWo.setWpId(wo.getWpId());
//zxh 20250520 返修路线为3400-3400的返修订单在车间订单级记录返修订单接收人
newWo.setMemo("返工路线是3400-3400,记录返修接收人为" + rr.getRecman());
//非3400返工
memo = memo + "返工路线是3400-3400 ---- ";
log.info("3400-3400新车间订单:woCode:{},oldYoCode:{}", newWo.getWoCode(), yieldOrder.getYoCode());
} else {
//copy原生产订单,更新单号和关键信息
YieldOrder newYieldOrder = new YieldOrder();
BeanUtils.copyProperties(yieldOrder, newYieldOrder);
newYieldOrder.setId(null);
// newYieldOrder.setDemandDate(rr.getReqdate());
//如果接收人不为空,则默认此接收人和接收时间
if (StringUtils.isNotBlank(rr.getRecman())) {
//user = epDosingRecDao.getUserByLdapName(rr.getRecman().trim());
}
//zxh 20241128 接收人赋值为返修订单接收人
newYieldOrder.setReceiveUser(Long.valueOf(rr.getRecman()));
// newYieldOrder.setFailureTime(StringUtils.isNotBlank(rr.getRecdate()) ?
// DateTime.parse(rr.getRecdate()) : new Date());
newYieldOrder.setMemo(rr.getRemark());
newYieldOrder.setReworkMemo(rr.getDetail());
newYieldOrder.setYpQty(rr.getAmount());
newYieldOrder.setPrimaryCraft(rr.getDeptcode());
newYieldOrder.setReworkCode(rr.getRedono());
newYieldOrder.setReworkNo(Long.valueOf(rr.getSeqno()));
newYieldOrder.setYoCode(rr.getRedono());
//zxh 20250522 找到原单,非3400-3400,复制pj后不再更改pocode
//newYieldOrder.setPoCode(rr.getRedono());
newYieldOrder.setProduceBool(Boolean.TRUE);
newYieldOrder.setStatus(YieldOrder.CUR_STATUS_PROCESSING);
//周新昊 20240912 返修订单找到原单复制pj后为使用部门代码赋值
newYieldOrder.setUseDeptCode(rr.getUsedept());
yieldOrderService.save(newYieldOrder);
log.info("不是厂内,保存新生产订单:yoId{},yoCode{}", newYieldOrder.getId(), newYieldOrder.getYoCode());
//原订单已经入库,则更新接收人、接收时间并且车间订单号不顺延原订单号,反之则需要顺延原订单号
if (wo.getPutStoreTime() != null) {
newWo.setWoCode(workOrderService.nextCode(rr.getRedono()));
newWo.setReInStore("1");
newYieldOrder.setYpCode(rr.getRedono());
} else {
newWo.setWoCode(workOrderService.nextCode(yieldOrder.getYpCode()));
}
//绑定新车间订单的接收信息
newWo.setYoId(newYieldOrder.getId());
//更新原生产订单状态为已关闭
YieldOrder oldYo = yieldOrderService.getById(yieldOrder.getId());
if (oldYo != null) {
oldYo.setStatus(YieldOrder.CUR_STATUS_VOIDED);
yieldOrderService.updateById(oldYo);
}
memo = memo + "新生产订单,yoId:" + newYieldOrder.getId() + " ---- ";
}
//返工订单流程卡号重新生成
newWo.setCardNo(workOrderService.nextCardNo(yieldOrder.getYpCode(), wo.getCardNo()));
newWo.setBatchNo(rr.getSplcode());
newWo.setMakeQty(rr.getAmount());
newWo.setRunStatus(WorkOrder.RUN_STATUS_NORMAL);
newWo.setPriority(wo.getPriority());
newWo.setReworkCode(rr.getRedono());
newWo.setReworkNo(rr.getSeqno());
newWo.setOem("0");
newWo.setOemOut("1");
newWo.setOemType(-1);
newWo.setPlanner(wo.getPlanner());
newWo.setDispatcher(wo.getDispatcher());
newWo.setReworkMemo(rr.getDetail());
// newWo.setDemandDate(rr.getReqdate());
workOrderService.addWorkOrder(newWo);
log.info("保存新车间订单:woId{},woCode{}", newWo.getId(), newWo.getWoCode());
//组装生产工序
wpList = new ArrayList<>(rpList.size());
WorkPlan wp;
for (PrReworkProcessEntity rp : rpList) {
wp = new WorkPlan();
wp.setOrders(rp.getProcessNo());
wp.setHourQuota(rp.getHourQuota());
wp.setMakeMemo(rp.getMakeMemo());
wp.setStatus(WorkPlan.STATUS_NO_START);
wp.setPlanStartTime(rp.getStartTime().toInstant()
.atZone(ZoneId.systemDefault()) // 指定时区(通常用系统默认)
.toLocalDateTime());
wp.setPlanEndTime(rp.getEndTime().toInstant()
.atZone(ZoneId.systemDefault()) // 指定时区(通常用系统默认)
.toLocalDateTime());
wp.setRpId(rp.getId());
if (rp.getMakeTeam() != null) {
wp.setMakeTeam(rp.getMakeTeam());
wp.setOem("0");
} else {
wp.setOem(rp.getOcName());
wp.setOem("1");
}
wpList.add(wp);
}
}
return this.receiveOrderAndSave(rr, rpList);
}
}
private List<PrReworkProcessEntity> listByReworkCode(String redono, Integer seqno, String prtno, String splcode) {
List<PrReworkProcessEntity> prReworkProcessList = new ArrayList<>();
// 首先根据返工单号+零件号——批次号去查
prReworkProcessList = null; //prReworkProcessDao.listByReworkCode(reworkCode, reworkNo, partCode, batchNo);
if (prReworkProcessList != null && prReworkProcessList.size() > 0) {
return prReworkProcessList;
}
return prReworkProcessList;
public boolean receiveOrderAndSave(MesRbRedoRoutDTO rr, List<PrReworkProcessEntity> rpList) {
YieldOrder yieldOrder = new YieldOrder();
String batchNo = rr.getSplcode();
if (batchNo == null) {
batchNo = yieldOrderService.nextBatchNo();
}
DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(rr.getPrtno().trim(), null);
if (part == null) {
throw new ServiceException("零件信息【" + rr.getPrtno() + "】不存在!");
}
DsPartVersionEntity newPartVersion = dsPartService.getNewPartVersion(rr.getPrtno().trim());
if (newPartVersion != null) {
throw new ServiceException("零件【" + rr.getPrtno() + "】的版本不存在!");
}
yieldOrder.setPartVersion(newPartVersion.getPartVersion());
yieldOrder.setRank("2");
yieldOrder.setBatchNo(batchNo);
yieldOrder.setCardNo(yieldOrderService.nextCardNo());
yieldOrder.setYoCode(yieldOrderService.nextCode(rr.getRedono()));
yieldOrder.setYpCode(rr.getRedono());
yieldOrder.setPartCode(part.getPartCode());
yieldOrder.setProductType(part.getProductType());
yieldOrder.setPartName(part.getPartName());
yieldOrder.setPlate(part.getPlate());
yieldOrder.setProductIdent(rr.getPrtlotno());
yieldOrder.setUseDept(rr.getUsedept());
yieldOrder.setYpArea(part.getCraftWay().indexOf("封接") > 0 ? 0.0000000000 : part.getArea());
if (ObjectUtils.isEmpty(yieldOrder.getYpArea())) {
throw new ServiceException("零件面积不能为空,请联系工艺");
}
yieldOrder.setDemandDate(this.dateParse(rr.getReqdate()));
yieldOrder.setPlanUser(rr.getRecman());
yieldOrder.setReleaseDate(this.dateParse(rr.getRecdate()));
yieldOrder.setMemo(rr.getRemark());
yieldOrder.setReworkMemo(rr.getDetail());
yieldOrder.setYieldType("1".equals(part.getIsSintering()) ? YieldOrder.YIELD_TYPE_2 : YieldOrder.YIELD_TYPE_1);
yieldOrder.setYpQty(rr.getAmount());
yieldOrder.setSiteWork(Boolean.FALSE);
yieldOrder.setPrimaryCraft(rr.getDeptcode());
yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode());
List<User> users = userClient.listByNameNolike(rr.getRecman());
yieldOrder.setReceiveUser(CollectionUtils.isNotEmpty(users) ? users.get(0).getId() : AuthUtil.getUserId());
yieldOrder.setReceiveTime(new Date());
yieldOrder.setReworkCode(rr.getRedono());
yieldOrder.setReworkNo((long) rr.getSeqno());
yieldOrder.setBusinessType(Integer.valueOf("-1"));
yieldOrderService.save(yieldOrder);
//生产订单工艺
List<YieldOrderCraft> ycList = new ArrayList<>(rpList.size());
YieldOrderCraft yc;
for (PrReworkProcessEntity rp : rpList) {
yc = new YieldOrderCraft();
yc.setYoId(yieldOrder.getId());
yc.setMakeTeam(rp.getMakeTeam());
yc.setOcId(rp.getOcId());
yc.setCaId(rp.getCaId());
yc.setPpsId(rp.getPpsId());
yc.setHourQuota(rp.getHourQuota().doubleValue());
yc.setMakeMemo(rp.getMakeMemo());
yc.setStartTime(rp.getStartTime());
yc.setEndTime(rp.getEndTime());
yc.setProcessNo(rp.getProcessNo());
yc.setRpId(rp.getId());
ycList.add(yc);
}
boolean saveResult = yieldOrderCraftService.saveBatch(ycList);
if (saveResult) {
// 修改erp返工单状态
erpDataProduceClient.receiveOrder(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode(), rr.getAmount(), rr.getReqqty(), AuthUtil.getUserName(), 1).getData();
}
return saveResult;
}
@Override
public void completeOrder(MesRbRedoRoutDTO rr, String userName) {
WorkOrder wo = workOrderService.getOne(Wrappers.lambdaQuery(WorkOrder.class)
.eq(WorkOrder::getBatchNo, rr.getSplcode()));
@Transactional(rollbackFor = Exception.class)
public boolean completeOrder(MesRbRedoRoutDTO rr, String userName) {
WorkOrder wo = workOrderService.getWorkOrderUniqueRec(rr.getPrtno(), rr.getSplcode(), rr.getSono());
if (wo != null) {
//记录返工单号
wo.setQcReworkCode(rr.getRedono());
//如果原车间订单状态小于已交接,就更改原订单状态为返工,否则不更改
if (wo.getRunStatus() < WorkOrder.RUN_STATUS_HANDOVER) {
//修改旧订单状态
workOrderService.updateStatus(null, WorkOrder.RUN_STATUS_REWORK, wo.getId(), null);
workOrderService.updateStatus(Collections.singletonList(wo.getId()), WorkOrder.RUN_STATUS_REWORK, AuthUtil.getUserId(), null);
}
// 如果有 FatherYoId 有值,则代表他是子件 修改部件状态为返工
YieldOrder pjYieldOrder = yieldOrderService.getById(wo.getYoId());
if (pjYieldOrder.getFatherYoId() != null) {
List<WorkOrder> fatherPrWorkOrderList = workOrderService.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, pjYieldOrder.getFatherYoId()));
if (fatherPrWorkOrderList != null && fatherPrWorkOrderList.size() > 0) {
if (fatherPrWorkOrderList != null && !fatherPrWorkOrderList.isEmpty()) {
for (WorkOrder fatherPrWorkOrder : fatherPrWorkOrderList) {
// 记录原状态
fatherPrWorkOrder.setOldRunStatus(fatherPrWorkOrder.getRunStatus());
@ -651,9 +631,30 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
}
}
} else {
// 通过返工单查询生产处置单 解决烧结通过装配模式返工的订单
ReviewSheet qcReviewSheet = reviewSheetService.getByRsCode(rr.getRedono());
if (qcReviewSheet != null) {
InspectionTask prWorkCheck = inspectionTaskService.getById(qcReviewSheet.getWcId());
if (prWorkCheck != null) {
WorkPlan workPlan = this.getById(prWorkCheck.getWpId());
WorkOrder prWorkOrder = workOrderService.getById(workPlan.getWoId());
// 关闭部件订单
prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_REWORK);
workOrderService.updateById(prWorkOrder);
// 关闭状态小于完工的子件订单
List<WorkOrder> workOrderSubList = workOrderService.findCubByYoId(prWorkOrder.getYoId());
if (workOrderSubList != null && !workOrderSubList.isEmpty()) {
for (WorkOrder workOrder : workOrderSubList) {
if (workOrder.getRunStatus() < WorkOrder.RUN_STATUS_COMPLETED) {
workOrder.setRunStatus(WorkOrder.RUN_STATUS_REWORK);
workOrderService.updateById(workOrder);
}
}
}
}
}
}
this.completeOrder(rr, userName);
return erpDataProduceClient.completeOrder(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode(), rr.getAmount(), rr.getBfqty(), userName).getData();
}
@Override
@ -723,6 +724,24 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
// prWorkOrderService.updateHostWorkUnit(woId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean receiveNoProcessOrder() {
// 查询所有返工无工艺订单
List<MesRbRedoRoutDTO> reworkNoProcessList = erpDataProduceClient.loadReworkNoProcess().getData();
if (CollectionUtils.isEmpty(reworkNoProcessList)) {
return false;
}
for (MesRbRedoRoutDTO rr : reworkNoProcessList) {
List<PrReworkProcessEntity> rpList = dsPartService.selectReworkPartCraft(rr.getPrtno(), rr.getRedono(), rr.getSplcode(), String.valueOf(rr.getSeqno()));
if (CollectionUtils.isEmpty(rpList)) {
continue;
}
this.receiveOrderAndSave(rr, rpList);
}
return true;
}
private void unBindBsRackSet(RackSetEntity bsRackSet) {
if (bsRackSet != null) {
bsRackSet.setBindQty((short) 0);
@ -776,5 +795,17 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
}
}
private Date dateParse(String d) {
if (d != null && !d.trim().isEmpty()) {
if (d.length() < 19) {
d = d + "0000-00-00 00:00:00".substring(d.length());
}
return Date.from(LocalDateTime.parse(d, defaultDateTimeFormat).atZone(ZoneId.systemDefault()).toInstant());
} else {
return null;
}
}
}

@ -58,7 +58,6 @@ import org.springblade.system.cache.DictCache;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -730,7 +729,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return baseMapper.findByPartCodeAndMemo(partCode, ypCode);
}
private List<WorkOrder> findCubByYoId(Long id) {
@Override
public List<WorkOrder> findCubByYoId(Long id) {
return baseMapper.findCubByYoId(id);
}
@ -889,6 +889,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return workInProcess.stream().collect(Collectors.groupingBy(WorkInProcessVO::getPartCode));
}
@Override
public WorkOrder getWorkOrderUniqueRec(String prtno, String splcode, String sono) {
return baseMapper.getWorkOrderUniqueRec(prtno, splcode, sono);
}
private String cardNextCode() {
String codePattern = "RBMES" + getRand("YYMM", 0);
int randNum1 = (int) (Math.random() * (1000 - 100 + 1) + 100);

@ -1,10 +1,12 @@
package org.springblade.erpdata.feign;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Hidden;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.erpdata.pojo.vo.MesRbRedoVO;
import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springblade.erpdata.service.IErpDataProduceService;
@ -70,4 +72,34 @@ public class ErpDataProduceClient implements IErpDataProduceClient {
return R.data(erpDataProduceService.chkShjh(woCode, ypCode, partCode, productIdent, makeQty, memo));
}
@Override
public R<List<PpmReportDetailModelVO>> reviewFormMess(Boolean queryType, String reworkCode, String partCode, String batchNo) {
return R.data(erpDataProduceService.reviewFormMess(queryType, reworkCode, partCode, batchNo));
}
@Override
public R<List<MesRbRedoVO>> loadReworkPlan(String reworkCode, String partCode, String batchNo, Integer current, Integer size) {
return R.data(erpDataProduceService.loadReworkPlan(reworkCode, partCode, batchNo, current, size));
}
@Override
public R<Integer> loadReworkPlanSize(String reworkCode, String partCode, String batchNo) {
return R.data(erpDataProduceService.loadReworkPlanSize(reworkCode, partCode, batchNo));
}
@Override
public R<Boolean> completeOrder(String redono, Integer seqno, String prtno, String splcode, Double amount, Integer bfqty, String userName) {
return R.data(erpDataProduceService.completeOrder(redono, seqno, prtno, splcode, amount, bfqty, userName));
}
@Override
public R<Boolean> receiveOrder(String redono, Integer seqno, String prtno, String splcode, Double amount, String reqqty, String userName, int reworkgyFlag) {
return R.data(erpDataProduceService.receiveOrder(redono, seqno, prtno, splcode, amount, reqqty, userName, reworkgyFlag));
}
@Override
public R<List<MesRbRedoRoutDTO>> loadReworkNoProcess() {
return R.data(erpDataProduceService.loadReworkNoProcess());
}
}

@ -2,7 +2,10 @@ package org.springblade.erpdata.mapper;
import com.baomidou.mybatisplus.core.mapper.Mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.erpdata.pojo.dto.ReworkProcessDTO;
import org.springblade.erpdata.pojo.vo.MesRbRedoVO;
import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
@ -27,4 +30,12 @@ public interface ErpDataProduceMapper extends Mapper {
String getCustodianByRecDept(String partCode, String recDept);
int loadReworkOrderSize(String reworkCode, String partCode, String batchNo);
List<PpmReportDetailModelVO> reviewFormMess(Boolean queryType, String reworkCode, String partCode, String batchNo);
List<MesRbRedoVO> loadReworkPlan(String reworkCode, String partCode, String batchNo, Integer current, Integer size);
Integer loadReworkPlanSize(String reworkCode, String partCode, String batchNo);
List<MesRbRedoRoutDTO> loadReworkNoProcess();
}

@ -104,4 +104,76 @@
</if>
</where>
</select>
<select id="reviewFormMess" resultType="org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO">
select a.code,
a.p5layer1,
a.p5layer3,
a.useproc,
a.useseq,
a.precode,
a.redodeptcode,
a.p1remark,
a.disposename,
a.deptcode,
a.p2layer1,
a.chker,
a.prtno,
a.lotno
from dba_mgr.v_mes_rb_qisbillqry a
<where>
<if test="queryType">
AND code = #{reworkCode}
</if>
<if test="!queryType">
AND prtno = #{partCode} AND lotno = #{batchNo}
</if>
</where>
</select>
<select id="loadReworkPlan" resultType="org.springblade.erpdata.pojo.vo.MesRbRedoVO">
SELECT *
FROM (
SELECT row_.*, ROWNUM rownum_
FROM (
SELECT
*
FROM
dba_mgr.v_mes_rb_redo
<where>
<if test="reworkCode != null and reworkCode != ''">
AND redono LIKE concat(concat('%', #{reworkCode}),'%')
</if>
<if test="partCode != null and partCode != ''">
AND prtno LIKE concat(concat('%', #{partCode}),'%')
</if>
<if test="batchNo != null and batchNo != ''">
AND splcode LIKE concat(concat('%', #{batchNo}),'%')
</if>
</where>
ORDER BY reqdate DESC
) row_
WHERE ROWNUM &lt;= (#{current} * #{size})
)
WHERE rownum_ &gt; (#{current} - 1) * #{size}
</select>
<select id="loadReworkPlanSize" resultType="java.lang.Integer">
SELECT
count(*)
FROM
dba_mgr.v_mes_rb_redo a
<where>
1 = 1
<if test="reworkCode != null and reworkCode != ''">
AND a.redono LIKE concat(concat('%', #{reworkCode}),'%')
</if>
<if test="partCode != null and partCode != ''">
AND a.prtno LIKE concat(concat('%', #{partCode}),'%')
</if>
<if test="batchNo != null and batchNo != ''">
AND a.splcode LIKE concat(concat('%', #{batchNo}),'%')
</if>
</where>
</select>
<select id="loadReworkNoProcess" resultType="org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO">
select a.* from dba_mgr.v_mes_rb_redogynull a order by a.recdate asc
</select>
</mapper>

@ -23,10 +23,11 @@
a.prodline
FROM dba_mgr.v_mes_rb_wo a
<where>
a.wopordat <![CDATA[ >= ]]> TO_DATE(#{newlevdateMax}, 'YYYY-MM-DD HH24:MI:SS')
a.processlinedesc like '%4%'
AND a.processline NOT IN (SELECT KEY FROM dba_mgr.t_listelement WHERE listname = 'SJZJPROCESSLINE')
and a.wopordat <![CDATA[ >= ]]> TO_DATE(#{newlevdateMax}, 'YYYY-MM-DD HH24:MI:SS')
</where>
order by a.wopordat desc
</select>
<select id="getNewlevdateMax" resultType="java.lang.String">

@ -1,7 +1,8 @@
package org.springblade.erpdata.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.erpdata.pojo.dto.ReworkProcessDTO;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.erpdata.pojo.vo.MesRbRedoVO;
import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
@ -31,4 +32,16 @@ public interface IErpDataProduceService {
String chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo);
Integer loadReworkOrderSize(String reworkCode, String partCode, String batchNo);
List<PpmReportDetailModelVO> reviewFormMess(Boolean queryType, String reworkCode, String partCode, String batchNo);
List<MesRbRedoVO> loadReworkPlan(String reworkCode, String partCode, String batchNo, Integer current, Integer size);
Integer loadReworkPlanSize(String reworkCode, String partCode, String batchNo);
boolean completeOrder(String redono, Integer seqno, String prtno, String splcode, Double amount, Integer bfqty, String userName);
boolean receiveOrder(String redono, Integer seqno, String prtno, String splcode, Double amount, String reqqty, String userName, int reworkgyFlag);
List<MesRbRedoRoutDTO> loadReworkNoProcess();
}

@ -1,12 +1,11 @@
package org.springblade.erpdata.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.erpdata.mapper.ErpDataProduceMapper;
import org.springblade.erpdata.pojo.dto.ReworkProcessDTO;
import org.springblade.erpdata.pojo.vo.MesRbRedoVO;
import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springblade.erpdata.service.IErpDataProduceService;
@ -17,10 +16,7 @@ import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Service;
import java.sql.Types;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* @author litao
@ -64,7 +60,7 @@ public class ErpDataProduceServiceImpl implements IErpDataProduceService {
public String chkSjjd(String ypCode, String batchNo) {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
// 指定存储过程名(包含 DB Link)
.withProcedureName("pro_rbchksjjd")
.withProcedureName("dba_mgr.pro_rbchksjjd")
// 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
.withoutProcedureColumnMetaDataAccess()
// 显式声明参数
@ -93,7 +89,7 @@ public class ErpDataProduceServiceImpl implements IErpDataProduceService {
// 1. 配置 SimpleJdbcCall
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
// 指定存储过程名称 (包含 DB Link)
.withProcedureName("pro_inchk")
.withProcedureName("dba_mgr.pro_inchk")
// 【关键】关闭元数据自动获取
// 通过 DB Link 调用时,这能避免权限不足或性能问题,必须手动 declareParameters
.withoutProcedureColumnMetaDataAccess()
@ -136,4 +132,104 @@ public class ErpDataProduceServiceImpl implements IErpDataProduceService {
public Integer loadReworkOrderSize(String reworkCode, String partCode, String batchNo) {
return erpDataProduceMapper.loadReworkOrderSize(reworkCode, partCode, batchNo);
}
@Override
public List<PpmReportDetailModelVO> reviewFormMess(Boolean queryType, String reworkCode, String partCode, String batchNo) {
return erpDataProduceMapper.reviewFormMess(queryType, reworkCode, partCode, batchNo);
}
@Override
public List<MesRbRedoVO> loadReworkPlan(String reworkCode, String partCode, String batchNo, Integer current, Integer size) {
return erpDataProduceMapper.loadReworkPlan(reworkCode, partCode, batchNo, current, size);
}
@Override
public Integer loadReworkPlanSize(String reworkCode, String partCode, String batchNo) {
return erpDataProduceMapper.loadReworkPlanSize(reworkCode, partCode, batchNo);
}
@Override
public boolean completeOrder(String redono, Integer seqno, String prtno, String splcode, Double amount, Integer bfqty, String userName) {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
// 指定存储过程名(包含 DB Link)
.withProcedureName("dba_mgr.pro_rbmesredoend")
// 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
.withoutProcedureColumnMetaDataAccess()
// 显式声明参数
.declareParameters(
new SqlParameter("v_redono", Types.VARCHAR),
new SqlParameter("v_seqno", Types.INTEGER),
new SqlParameter("v_prtno", Types.VARCHAR),
new SqlParameter("v_splcode", Types.VARCHAR),
new SqlParameter("v_endqty", Types.DOUBLE),
new SqlParameter("v_enddat", Types.DATE),
new SqlParameter("v_endman", Types.VARCHAR),
new SqlParameter("v_bfqty", Types.INTEGER),
new SqlOutParameter("v_excnote", Types.VARCHAR),
new SqlOutParameter("v_excflag", Types.VARCHAR)
);
// 2. 封装输入参数
Map<String, Object> inParams = new HashMap<>();
inParams.put("v_redono", redono);
inParams.put("v_seqno", seqno);
inParams.put("v_prtno", prtno);
inParams.put("v_splcode", splcode);
inParams.put("v_endqty", amount);
inParams.put("v_enddat", new Date());
inParams.put("v_endman", userName);
inParams.put("v_bfqty", bfqty);
// 3. 执行并获取结果 Map
Map<String, Object> resultMap = jdbcCall.execute(inParams);
// 4. 提取输出参数
String excflag = (String) resultMap.get("v_excflag");
String excnote = (String) resultMap.get("v_excnote");
return !"0".equals(excflag);
}
@Override
public boolean receiveOrder(String redono, Integer seqno, String prtno, String splcode, Double amount, String reqqty, String userName, int reworkgyFlag) {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
// 指定存储过程名(包含 DB Link)
.withProcedureName("dba_mgr.pro_rbmesredorec")
// 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
.withoutProcedureColumnMetaDataAccess()
// 显式声明参数
.declareParameters(
new SqlParameter("v_redono", Types.VARCHAR),
new SqlParameter("v_seqno", Types.INTEGER),
new SqlParameter("v_prtno", Types.VARCHAR),
new SqlParameter("v_splcode", Types.VARCHAR),
new SqlParameter("v_amount", Types.DOUBLE),
new SqlParameter("v_recqty", Types.DOUBLE),
new SqlParameter("v_recdate", Types.DATE),
new SqlParameter("v_recman", Types.VARCHAR),
new SqlParameter("v_reworkgyflag", Types.VARCHAR),
new SqlOutParameter("v_excnote", Types.VARCHAR),
new SqlOutParameter("v_excflag", Types.VARCHAR)
);
// 2. 封装输入参数
Map<String, Object> inParams = new HashMap<>();
inParams.put("v_redono", redono);
inParams.put("v_seqno", seqno);
inParams.put("v_prtno", prtno);
inParams.put("v_splcode", splcode);
inParams.put("v_amount", amount);
inParams.put("v_recqty", Double.valueOf(reqqty));
inParams.put("v_recdate", new Date());
inParams.put("v_recman", userName);
inParams.put("v_reworkgyflag", reworkgyFlag);
// 3. 执行并获取结果 Map
Map<String, Object> resultMap = jdbcCall.execute(inParams);
// 4. 提取输出参数
String excflag = (String) resultMap.get("v_excflag");
String excnote = (String) resultMap.get("v_excnote");
return !"0".equals(excflag);
}
@Override
public List<MesRbRedoRoutDTO> loadReworkNoProcess() {
return erpDataProduceMapper.loadReworkNoProcess();
}
}

@ -162,7 +162,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
mesRbWoList.forEach(mesRbWo -> {
YieldPlan yieldPlan=new YieldPlan();
yieldPlan.setProductIdent(mesRbWo.getPrtlotno());
yieldPlan.setYpQty(Long.valueOf(mesRbWo.getWoporqty()));
yieldPlan.setYpQty(Long.valueOf(Math.round(Double.parseDouble(mesRbWo.getWoporqty()))));
DsPartEntity part = apsOrderClient.getDsCraftListByCode(mesRbWo.getPrtno());
if(part != null){
yieldPlan.setYpArea(part.getArea());

@ -250,7 +250,7 @@ public class WorkOrderController extends BladeController {
@PostMapping("/receiveDispatcherFromOldMes")
@Operation(summary = "更新调度人员", description = "")
public R receiveDispatcherFromOldMes(@RequestBody JSONObject entity) {
workOrderService.receiveDispatcherFromOldMes(entity.getLong("id"), entity.getLong("dispatcher"));
// workOrderService.receiveDispatcherFromOldMes(entity.getLong("id"), entity.getLong("dispatcher"));
return R.success();
}

@ -164,7 +164,7 @@ public class WorkPlanController extends BladeController {
@PostMapping("/updateWorkPlan")
@Operation(summary = "更新作业计划", description = "")
public R updateWorkPlan(@RequestBody JSONObject entity) {
workPlanService.updateWorkPlan(entity.getLong("id"), entity.getDate("factStartTime"), entity.getDate("factEndTime"));
// workPlanService.updateWorkPlan(entity.getLong("id"), entity.getDate("factStartTime"), entity.getDate("factEndTime"));
return R.success();
}
}

@ -1,11 +1,11 @@
package org.springblade.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.pojo.entity.Role;
import org.springblade.system.pojo.entity.User;
@ -40,12 +40,11 @@ public class UserExtServiceImpl implements IUserExtService {
if (StringUtils.isBlank(roleAlias)) {
return null;
}
QueryWrapper<Role> qw = new QueryWrapper<Role>().eq("ROLE_ALIAS", roleAlias);
Role role = roleService.getOne(qw);
if (role == null) {
List<Role> list = roleService.list(Wrappers.lambdaQuery(Role.class).eq(Role::getRoleAlias, roleAlias));
if (CollectionUtils.isEmpty(list)) {
return null;
}
return userSearchService.listByRole(List.of(role.getId()));
return userSearchService.listByRole(list.stream().map(Role::getId).toList());
}
@Override

@ -96,7 +96,7 @@
SELECT *
FROM (
SELECT *
FROM co_goods
FROM st_goods
WHERE goods_code = #{code}
AND release_no = #{releaseNo}
AND is_deleted = 0

@ -14,10 +14,8 @@ import org.springblade.core.secure.utils.AuthUtil;
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.system.cache.SysCache;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.Dept;
import org.springblade.system.pojo.entity.User;
import org.springblade.wms.excel.StBuyOrderExcel;
import org.springblade.wms.mapper.StBuyOrderMapper;
@ -105,16 +103,16 @@ public class StBuyOrderServiceImpl extends BaseServiceImpl<StBuyOrderMapper, StB
newBuyOrder.setCreateUser(user.getUserId());
// 采购部门:固定编码0200
Dept buyDept = SysCache.getDeptByCode("0200");
if(buyDept != null){
newBuyOrder.setBuyDept(buyDept.getId());
}
// 需求部门:固定编码3400
Dept needDept = SysCache.getDeptByCode("3400");
if(needDept != null){
newBuyOrder.setNeedDept(needDept.getId());
}
// Dept buyDept = SysCache.getDeptByCode("0200");
// if(buyDept != null){
// newBuyOrder.setBuyDept(buyDept.getId());
// }
//
// // 需求部门:固定编码3400
// Dept needDept = SysCache.getDeptByCode("3400");
// if(needDept != null){
// newBuyOrder.setNeedDept(needDept.getId());
// }
// ===== 3. 日期默认值:当前系统时间 (原逻辑不变)
newBuyOrder.setDeclareDate(currDate);

@ -4,17 +4,13 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import lombok.Builder;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.C;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.desk.common.feign.IMesApprovalRecordClient;
import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity;
@ -30,7 +26,6 @@ import org.springblade.wms.service.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.*;
/**
@ -107,7 +102,7 @@ public class StClassRequestServiceImpl extends BaseServiceImpl<StClassRequestMap
String roleNameData = roleName.getData();
approvalRecord.setCurrentRoleName(roleNameData);
approvalRecord.setNextRoleName("热表-工艺员");
R<String> roleIdResp = sysClient.getRoleIds(null, approvalRecord.getNextRoleName());
R<String> roleIdResp = sysClient.getRoleIds("000000", approvalRecord.getNextRoleName());
String roleId = roleIdResp.getData();
approvalRecord.setNextRoleId(Long.valueOf(roleId));
mesApprovalRecordClient.save(approvalRecord);

@ -89,7 +89,7 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
String roleNameData = roleName.getData();
approvalRecord.setCurrentRoleName(roleNameData);
approvalRecord.setNextRoleName("热表-工艺员");
R<String> roleIdResp = sysClient.getRoleIds(null, approvalRecord.getNextRoleName());
R<String> roleIdResp = sysClient.getRoleIds("000000", approvalRecord.getNextRoleName());
String roleId = roleIdResp.getData();
approvalRecord.setNextRoleId(Long.valueOf(roleId));
mesApprovalRecordClient.save(approvalRecord);

@ -5,22 +5,18 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import org.springblade.common.exception.BusinessException;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
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.system.feign.ISysClient;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
import org.springblade.system.feign.IUserClient;
import org.springblade.wms.excel.StWmsRequestExcel;
import org.springblade.wms.mapper.StWmsRequestMapper;
import org.springblade.wms.pojo.entity.StBuyOrder;
import org.springblade.wms.pojo.entity.StClassRequest;
import org.springblade.wms.pojo.entity.StWmsRequest;
import org.springblade.wms.pojo.vo.StWmsRequestVO;
import org.springblade.wms.service.IStBuyOrderService;
@ -28,7 +24,6 @@ import org.springblade.wms.service.IStWmsRequestService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.*;
/**
@ -106,7 +101,7 @@ public class StWmsRequestServiceImpl extends BaseServiceImpl<StWmsRequestMapper,
String roleNameData = roleName.getData();
approvalRecord.setCurrentRoleName(roleNameData);
approvalRecord.setNextRoleName("保管员");
R<String> roleIdResp = sysClient.getRoleIds(null, approvalRecord.getNextRoleName());
R<String> roleIdResp = sysClient.getRoleIds("000000", approvalRecord.getNextRoleName());
String roleId = roleIdResp.getData();
approvalRecord.setNextRoleId(Long.valueOf(roleId));
mesApprovalRecordClient.save(approvalRecord);

Loading…
Cancel
Save