生产管理修改

master
李涛 11 hours ago
parent e58c6dda93
commit c7147943f3
  1. 30
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/produce/ReworkNoProcessProcessor.java
  2. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IDisTaskingClient.java
  3. 55
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java
  4. 34
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java
  5. 3
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/ReworkProcessDTO.java
  6. 115
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/MesRbRedoVO.java
  7. 185
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/PpmReportDetailModelVO.java
  8. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java
  9. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.java
  10. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.xml
  11. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  12. 33
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  13. 75
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ReworkProcessController.java
  14. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/DisTaskingClient.java
  15. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  16. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  17. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java
  18. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  19. 304
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java
  20. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  21. 34
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java
  22. 11
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.java
  23. 72
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.xml
  24. 17
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java
  25. 112
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java
  26. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java
  27. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkPlanController.java

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

@ -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,49 @@ 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") Integer bfqty, @RequestParam(value = "userName") 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") String reqqty, @RequestParam(value = "userName") 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;
}

@ -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;
@ -260,8 +259,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 +273,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();
}

@ -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>

@ -278,5 +278,11 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
*/
void saveOrder(List<YieldOrder> yieldOrderList);
String nextBatchNo();
String nextCardNo();
String nextCode(Object obj);
List<String> getToolByPartCode(String partCode);
}

@ -1150,7 +1150,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 +1181,9 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
num++;
return num;
}
private String nextBatchNo() {
@Override
public String nextBatchNo() {
// 自增总长度
int len = 3;
@ -1274,4 +1277,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);
}

@ -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,114 @@ 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);
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 +630,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 +723,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 +794,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.status(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.status(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>

@ -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
@ -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("pro_rbmesredoend")
// 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
.withoutProcedureColumnMetaDataAccess()
// 显式声明参数
.declareParameters(
new SqlParameter("v_redono", Types.VARCHAR),
new SqlParameter("v_seqno", Types.VARCHAR),
new SqlParameter("v_prtno", Types.VARCHAR),
new SqlParameter("v_splcode", Types.VARCHAR),
new SqlParameter("v_endqty", Types.VARCHAR),
new SqlParameter("v_enddat", Types.VARCHAR),
new SqlParameter("v_endman", Types.VARCHAR),
new SqlParameter("v_bfqty", 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_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("pro_rbmesredoend")
// 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
.withoutProcedureColumnMetaDataAccess()
// 显式声明参数
.declareParameters(
new SqlParameter("v_redono", Types.VARCHAR),
new SqlParameter("v_seqno", Types.VARCHAR),
new SqlParameter("v_prtno", Types.VARCHAR),
new SqlParameter("v_splcode", Types.VARCHAR),
new SqlParameter("v_amount", Types.VARCHAR),
new SqlParameter("v_recqty", Types.VARCHAR),
new SqlParameter("v_recdate", Types.VARCHAR),
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();
}
}

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

Loading…
Cancel
Save