通用生产订单保存;物资转车间协作加工转工单;临时转工单;烧结转工单;采购部推进计划转工单;外协转工单;正式工艺转工转工单;配套转工单;同步生产计划;根据计划自动生成玻璃饼订单;关闭生产计划。

liweidong
qinyulong 1 month ago
parent 3babff6fbb
commit f3af05f7d0
  1. 12
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCloseProdPlanProcessor.java
  2. 6
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCraftProcessor.java
  3. 6
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynGlassCakeProcessor.java
  4. 10
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynMesRbWoProcessor.java
  5. 6
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynOutsourcingProcessor.java
  6. 6
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseLOTTJProcessor.java
  7. 10
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseProcessor.java
  8. 6
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSinterProcessor.java
  9. 6
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSupportingFacilitiesProcessor.java
  10. 6
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynTemporaryProcessor.java
  11. 20
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IApsOrderClient.java
  12. 31
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClient.java
  13. 19
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClientFallback.java
  14. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/ApsOrderClient.java
  15. 19
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  16. 76
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  17. 184
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java
  18. 4
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.java
  19. 15
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml
  20. 128
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java
  21. 18
      blade-service/blade-wms/src/main/java/org/springblade/wms/feign/StRealtimeStockClientImpl.java
  22. 16
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStRealtimeStockService.java
  23. 10
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java

@ -2,7 +2,6 @@ package org.springblade.job.processor.erp;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.order.feign.IApsOrderClient;
import org.springblade.erpdata.feign.IErpMesRbWoClient; import org.springblade.erpdata.feign.IErpMesRbWoClient;
import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.TaskContext;
@ -16,15 +15,18 @@ public class SynCloseProdPlanProcessor implements BasicProcessor {
private final IErpMesRbWoClient mesRbWoClient; private final IErpMesRbWoClient mesRbWoClient;
//private final IApsOrderClient orderClient;
@Override @Override
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步关闭生产计划定时任务开始"); log.info("同步关闭生产计划定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synCloseProdPlan()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(() -> mesRbWoClient.synCloseProdPlan());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步关闭生产计划定时任务失败", exception);
} else {
log.info("同步关闭生产计划定时任务结束"); log.info("同步关闭生产计划定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -21,7 +21,13 @@ public class SynCraftProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步正式工艺订单定时任务开始"); log.info("同步正式工艺订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synCraft()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synCraft());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步正式工艺订单定时任务失败", exception);
} else {
log.info("同步正式工艺订单定时任务结束"); log.info("同步正式工艺订单定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -22,7 +22,13 @@ public class SynGlassCakeProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步玻璃饼订单定时任务开始"); log.info("同步玻璃饼订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> orderClient.synGlassCake()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> orderClient.synGlassCake());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步玻璃饼订单定时任务失败", exception);
} else {
log.info("同步玻璃饼订单定时任务结束"); log.info("同步玻璃饼订单定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -19,9 +19,15 @@ public class SynMesRbWoProcessor implements BasicProcessor {
@Override @Override
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步生产订单定时任务开始"); log.info("同步生产计划定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synMesRbWo()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synMesRbWo());
log.info("同步生产订单定时任务结束"); runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步生产计划定时任务失败", exception);
} else {
log.info("同步生产计划定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -21,7 +21,13 @@ public class SynOutsourcingProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步外协订单定时任务开始"); log.info("同步外协订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synOutsourcing()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synOutsourcing());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步外协订单定时任务失败", exception);
} else {
log.info("同步外协订单定时任务结束"); log.info("同步外协订单定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -21,7 +21,13 @@ public class SynPurchaseLOTTJProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步采购LOTTJ订单定时任务开始"); log.info("同步采购LOTTJ订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synPurchaseLOTTJ()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synPurchaseLOTTJ());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步采购LOTTJ订单定时任务失败", exception);
} else {
log.info("同步采购LOTTJ订单定时任务结束"); log.info("同步采购LOTTJ订单定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -19,9 +19,15 @@ public class SynPurchaseProcessor implements BasicProcessor {
@Override @Override
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步采购订单定时任务开始"); log.info("同步物资转车间协作加工订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synPurchase()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synPurchase());
log.info("同步采购订单定时任务结束"); runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步物资转车间协作加工订单定时任务失败", exception);
} else {
log.info("同步物资转车间协作加工订单定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -21,7 +21,13 @@ public class SynSinterProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步烧结订单定时任务开始"); log.info("同步烧结订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synSinter()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synSinter());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步烧结订单定时任务失败", exception);
} else {
log.info("同步烧结订单定时任务结束"); log.info("同步烧结订单定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -21,7 +21,13 @@ public class SynSupportingFacilitiesProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步配套订单定时任务开始"); log.info("同步配套订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synSupportingFacilities()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synSupportingFacilities());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步配套订单定时任务失败", exception);
} else {
log.info("同步配套订单定时任务结束"); log.info("同步配套订单定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -21,7 +21,13 @@ public class SynTemporaryProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception { public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步临时订单定时任务开始"); log.info("同步临时订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synTemporary()); CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synTemporary());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步临时订单定时任务失败", exception);
} else {
log.info("同步临时订单定时任务结束"); log.info("同步临时订单定时任务结束");
}
});
return new ProcessResult(true); return new ProcessResult(true);
} }
} }

@ -29,6 +29,7 @@ public interface IApsOrderClient {
String GET_CRAFT_LIST = API_PREFIX + "/getDsCraftList"; String GET_CRAFT_LIST = API_PREFIX + "/getDsCraftList";
String GET_PLAN_LIST = API_PREFIX + "/getPlanList"; String GET_PLAN_LIST = API_PREFIX + "/getPlanList";
String GET_PART_LIST = API_PREFIX + "/getPartList"; String GET_PART_LIST = API_PREFIX + "/getPartList";
String GET_PART_LIST_BY_PARAM = API_PREFIX + "/getPartListByParam";
String UPDATE_BY_ID = API_PREFIX + "/updateById"; String UPDATE_BY_ID = API_PREFIX + "/updateById";
String CLOSE_PLAN_LIST = API_PREFIX + "/getClosePlanList"; String CLOSE_PLAN_LIST = API_PREFIX + "/getClosePlanList";
String MAX_CARD_NO = API_PREFIX + "/getMaxCardNo"; String MAX_CARD_NO = API_PREFIX + "/getMaxCardNo";
@ -37,6 +38,8 @@ public interface IApsOrderClient {
String GET_SELECT_TIME = API_PREFIX + "/getSelectTime"; String GET_SELECT_TIME = API_PREFIX + "/getSelectTime";
String GET_CRAFT_CODE = API_PREFIX + "/getDsCraftListByCode"; String GET_CRAFT_CODE = API_PREFIX + "/getDsCraftListByCode";
String SAVE_ORDER_LIST = API_PREFIX + "/saveOrderList"; String SAVE_ORDER_LIST = API_PREFIX + "/saveOrderList";
String SAVE_ORDER = API_PREFIX + "/saveOrder";
String GET_PART_BY_CODE = API_PREFIX + "/getPartByCode";
String UP_DATE_MAX = API_PREFIX + "/upByDateMax"; String UP_DATE_MAX = API_PREFIX + "/upByDateMax";
@PostMapping(SYNC_PLAN_FROM_SAVE) @PostMapping(SYNC_PLAN_FROM_SAVE)
@ -45,8 +48,11 @@ public interface IApsOrderClient {
List<DsCraftEntity> getDsCraftList(); List<DsCraftEntity> getDsCraftList();
@GetMapping(GET_PLAN_LIST) @GetMapping(GET_PLAN_LIST)
List<YieldPlan> getPlanList(); List<YieldPlan> getPlanList();
@GetMapping(GET_PART_LIST_BY_PARAM)
List<DsPartEntity> getPartListByParam(List<String> partCodeList);
@GetMapping(GET_PART_LIST) @GetMapping(GET_PART_LIST)
List<DsPartEntity> getPartList(List<String> partCodeList); List<DsPartEntity> getPartList();
@GetMapping(UPDATE_BY_ID) @GetMapping(UPDATE_BY_ID)
void updateById(YieldPlan yieldPlan); void updateById(YieldPlan yieldPlan);
@GetMapping(CLOSE_PLAN_LIST) @GetMapping(CLOSE_PLAN_LIST)
@ -65,4 +71,16 @@ public interface IApsOrderClient {
void saveOrderList(List<YieldOrder> yieldOrderList); void saveOrderList(List<YieldOrder> yieldOrderList);
@GetMapping (UP_DATE_MAX) @GetMapping (UP_DATE_MAX)
void upByDateMax(@RequestParam("max") String max,@RequestParam("code") String code); void upByDateMax(@RequestParam("max") String max,@RequestParam("code") String code);
// Long getCount(@RequestParam("yoCode") String yoCode,@RequestParam("cardNo") String cardNo,@RequestParam("batchNo") String batchNo,@RequestParam("roamNo") String roamNo);
@GetMapping(GET_PART_BY_CODE)
DsPartEntity getPartByCode(String code);
/**
* 生产订单通用保存方法
*
* @param yieldOrderList
*/
@PostMapping(SAVE_ORDER)
void saveOrder(List<YieldOrder> yieldOrderList);
} }

@ -4,12 +4,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springblade.core.mp.support.Query; import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.wms.pojo.entity.StGoods; import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springblade.wms.pojo.vo.StGoodStatisVO;
import org.springblade.wms.pojo.vo.StRealtimeStockVO; import org.springblade.wms.pojo.vo.StRealtimeStockVO;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/** /**
* 仓库实时结余远程调用 * 仓库实时结余远程调用
@ -27,6 +32,12 @@ public interface StRealtimeStockClient {
String MEASURING_Id = API_PREFIX + "/getById"; String MEASURING_Id = API_PREFIX + "/getById";
String GET_REALTIME_STOCK_BY_GOOD = API_PREFIX + "/getRealtimeStockByGood";
String COUNT_QUANTITY_AND_OCCUPY_QUANTITY = API_PREFIX + "/countQuantityAndOccupyQuantity";
String SAVE_OR_UPDATE_BATCH = API_PREFIX + "/saveOrUpdateBatch";
/** /**
* 量具库存 * 量具库存
*/ */
@ -36,4 +47,24 @@ public interface StRealtimeStockClient {
@PostMapping(MEASURING_Id) @PostMapping(MEASURING_Id)
R<StGoods> getById(@RequestBody StGoods stGoods); R<StGoods> getById(@RequestBody StGoods stGoods);
/**
* 查询指定物料的可用库存记录
*
* @param goodCode
* @return
*/
@GetMapping(GET_REALTIME_STOCK_BY_GOOD)
List<StRealtimeStock> getRealtimeStockByGood(@RequestParam("goodCode") String goodCode);
/**
* 汇总指定物料的总库存总已占用库存
*
* @param goodCode
* @return
*/
@GetMapping(COUNT_QUANTITY_AND_OCCUPY_QUANTITY)
StGoodStatisVO countQuantityAndOccupyQuantity(@RequestParam("goodCode") String goodCode);
@PostMapping(SAVE_OR_UPDATE_BATCH)
R saveOrUpdateBatch(List<StRealtimeStock> stockList);
} }

@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springblade.core.mp.support.Query; import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.wms.pojo.entity.StGoods; import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springblade.wms.pojo.vo.StGoodStatisVO;
import org.springblade.wms.pojo.vo.StRealtimeStockVO; import org.springblade.wms.pojo.vo.StRealtimeStockVO;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* Feign失败配置 * Feign失败配置
* *
@ -25,5 +29,20 @@ public class StRealtimeStockClientFallback implements StRealtimeStockClient {
return null; return null;
} }
@Override
public List<StRealtimeStock> getRealtimeStockByGood(String goodCode) {
return List.of();
}
@Override
public StGoodStatisVO countQuantityAndOccupyQuantity(String goodCode) {
return null;
}
@Override
public R saveOrUpdateBatch(List<StRealtimeStock> stockList) {
return R.fail("更新失败");
}
} }

@ -1,5 +1,7 @@
package org.springblade.desk.order.feign; package org.springblade.desk.order.feign;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -57,7 +59,12 @@ public class ApsOrderClient implements IApsOrderClient {
} }
@Override @Override
public List<DsPartEntity> getPartList(List<String> partCodeList) { public List<DsPartEntity> getPartList() {
return dsPartService.list();
}
@Override
public List<DsPartEntity> getPartListByParam(List<String> partCodeList) {
return dsPartService.list(new QueryWrapper<DsPartEntity>().lambda() return dsPartService.list(new QueryWrapper<DsPartEntity>().lambda()
.in(DsPartEntity::getPartCode, partCodeList) .in(DsPartEntity::getPartCode, partCodeList)
.like(DsPartEntity::getPartName, "玻璃")); .like(DsPartEntity::getPartName, "玻璃"));
@ -124,4 +131,21 @@ public class ApsOrderClient implements IApsOrderClient {
public void upByDateMax(String max, String code) { public void upByDateMax(String max, String code) {
yieldPlanService.updateByNewlevdateMax(max,code); yieldPlanService.updateByNewlevdateMax(max,code);
} }
@Override
public DsPartEntity getPartByCode(String code) {
return dsPartService.getOne(new LambdaQueryWrapper<DsPartEntity>()
.eq(DsPartEntity::getPartCode, code));
}
@Override
public void saveOrder(List<YieldOrder> yieldOrderList) {
yieldOrderService.saveOrder(yieldOrderList);
}
// @Override
// public Long getCount(String yoCode, String cardNo, String batchNo, String roamNo) {
// return yieldOrderService.getCount(yoCode,cardNo,batchNo,roamNo);
// }
} }

@ -258,4 +258,23 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
* @param dsPartSub * @param dsPartSub
*/ */
void saveGlassCake(String yoCode, String cardNo, String batchNo, YieldPlan po, DsPartEntity dsPartSub); void saveGlassCake(String yoCode, String cardNo, String batchNo, YieldPlan po, DsPartEntity dsPartSub);
/**
* 根据下列参数查询生产订单数量
*
* @param yoCode
* @param cardNo
* @param batchNo
* @param roamNo
* @return
*/
Long getCount(String yoCode, String cardNo, String batchNo, String roamNo);
/**
* 生产订单通用保存方法
*
* @param yieldOrderList
*/
void saveOrder(List<YieldOrder> yieldOrderList);
} }

@ -5,9 +5,11 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -35,10 +37,12 @@ import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.dashboard.service.IDsProcessService; import org.springblade.desk.dashboard.service.IDsProcessService;
import org.springblade.desk.order.constant.YieldOrderConst; import org.springblade.desk.order.constant.YieldOrderConst;
import org.springblade.desk.order.mapper.YieldOrderMapper; import org.springblade.desk.order.mapper.YieldOrderMapper;
import org.springblade.desk.order.mapper.YieldPlanMapper;
import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldOrderCraft; import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.pojo.vo.LineMemoVo;
import org.springblade.desk.order.service.IYieldOrderCraftService; import org.springblade.desk.order.service.IYieldOrderCraftService;
import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkOrderMapper; import org.springblade.desk.produce.mapper.WorkOrderMapper;
@ -69,6 +73,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
private final IDsProcessService dsProcessService; private final IDsProcessService dsProcessService;
private final WorkOrderMapper workOrderMapper; private final WorkOrderMapper workOrderMapper;
private final YieldPlanMapper yieldPlanMapper;
private final IErpYieldOrderClient yieldOrderClient; private final IErpYieldOrderClient yieldOrderClient;
@Value("${business.oldMes.url}") @Value("${business.oldMes.url}")
@ -815,6 +821,14 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
po.getYpCode(), po.getYpQty(), dsPartSub.getPartCode(), dsPartSub.getQuota()); po.getYpCode(), po.getYpQty(), dsPartSub.getPartCode(), dsPartSub.getQuota());
} }
@Override
public Long getCount(String yoCode, String cardNo, String batchNo, String roamNo) {
return this.count(Wrappers.<YieldOrder>lambdaQuery().eq(YieldOrder::getYoCode, yoCode)
.eq(YieldOrder::getCardNo, cardNo)
.eq(YieldOrder::getBatchNo, batchNo)
.eq(YieldOrder::getRoamNo, roamNo));
}
@Override @Override
public R getCardNo(String cardNo) { public R getCardNo(String cardNo) {
if (cardNo.isEmpty()) { if (cardNo.isEmpty()) {
@ -828,6 +842,68 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return R.data(list.get(0)); return R.data(list.get(0));
} }
@Override
public void saveOrder(List<YieldOrder> yieldOrderList) {
yieldOrderList.forEach(order -> {
Long vCount = 0L;
//1.从生产订单表中查询订单
vCount = this.getCount(order.getYoCode(), order.getCardNo(), order.getBatchNo(), order.getRoamNo());
if (vCount > 0) {
//2.判断是否查询到订单,若查询到,直接退出
log.error(String.format("零件号【%s】,批号【%s】工单已转交,请勿重复转交!", order.getPartCode(), order.getBatchNo()));
}
//3.按零级号查询零件信息,零件信息处理
order.setYpArea((double) 0);
List<DsPartEntity> dsPartList = dsPartService.list(new QueryWrapper<DsPartEntity>().lambda()
.eq(DsPartEntity::getPartCode, order.getPartCode()));
if (dsPartList != null && dsPartList.size() > 0) {
DsPartEntity dsPartEntity = dsPartList.get(0);
order.setProductType(dsPartEntity.getProductType());
order.setPartName(dsPartEntity.getPartName());
if (dsPartEntity.getArea() != null) {
order.setYpArea(dsPartEntity.getArea());
}
order.setPrimaryCraft(dsPartEntity.getCraftWay());
order.setPlate(dsPartEntity.getPlate());
}
//4.查询是否为会议急件
Long vPriority = yieldPlanMapper.getMaxPriority(order.getYpCode());
order.setPriorityErp(vPriority.intValue());
//5. 厂内生产急件标识赋值
Long count = yieldPlanMapper.getCount(order.getYpCode(), order.getPartCode(), order.getBatchNo());
if (count > 0) {
order.setSiteWork(true);
order.setPriorityErp(5);
}
//6.对优先级字段进行转换,新旧mes中订单优先级的值不一致
vPriority += 14000;
order.setPriorityErp(Integer.parseInt(vPriority.toString()));
//7.烧结订单处理, -- 默认厂内加工
if ("2".equals(order.getYieldType()) || "3".equals(order.getYieldType())) {
order.setSiteWork(true);
}
//8.玻璃饼订单自动入库, 更新接收状态
order.setReceiveStatus(11000);
if ("3".equals(order.getYieldType())) {
order.setStatus(11001);
//对接受人赋值
Long receiveUser = yieldPlanMapper.getReceiveUser();
order.setReceiveUser(receiveUser);
//对接收时间进行赋值
order.setReceiveTime(new Date());
}
//9.从生产计划中查询产品系列和订单备注
LineMemoVo lineMemoVo = yieldPlanMapper.getLineMemo(order.getYpCode());
if (lineMemoVo != null && lineMemoVo.getSum() == 0) {
order.setMemo("");
order.setYpProductLine("");
} else {
order.setMemo(lineMemoVo.getMemo());
order.setYpProductLine(lineMemoVo.getProdLine());
}
});
this.saveBatch(yieldOrderList);
}
/** /**
* 验证零件子件信息 * 验证零件子件信息
* *

@ -1,13 +1,13 @@
package org.springblade.desk.order.service.impl; package org.springblade.desk.order.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.core.tool.api.ResultCode; import org.springblade.core.tool.api.ResultCode;
@ -20,17 +20,25 @@ import org.springblade.desk.order.mapper.YieldPlanMapper;
import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.pojo.enums.YieldPlanEnum; import org.springblade.desk.order.pojo.enums.YieldPlanEnum;
import org.springblade.desk.order.pojo.vo.LineMemoVo;
import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.order.service.IYieldPlanService; import org.springblade.desk.order.service.IYieldPlanService;
import org.springblade.erpdata.feign.IErpPartoplinkFirseqClient; import org.springblade.erpdata.feign.IErpPartoplinkFirseqClient;
import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.vo.RegionVO;
import org.springblade.wms.feign.StRealtimeStockClient;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springblade.wms.pojo.vo.StGoodStatisVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -46,7 +54,7 @@ public class YieldPlanServiceImpl extends BaseServiceImpl<YieldPlanMapper, Yield
private final IDsPartService dsPartService; private final IDsPartService dsPartService;
//private final IStRealtimeStockService stRealtimeStockService; private final StRealtimeStockClient stRealtimeStockClient;
@Override @Override
public IPage<YieldPlan> selectPageElectroplate(IPage<YieldPlan> page, YieldPlan entity) { public IPage<YieldPlan> selectPageElectroplate(IPage<YieldPlan> page, YieldPlan entity) {
@ -159,109 +167,109 @@ public class YieldPlanServiceImpl extends BaseServiceImpl<YieldPlanMapper, Yield
* 同步玻璃饼 * 同步玻璃饼
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synGlassCake() { public void synGlassCake() {
//查询未生成玻璃饼订单的烧结主制计划列表
List<YieldPlan> yieldPlanList=baseMapper.selectList(new QueryWrapper<YieldPlan>().lambda() List<YieldPlan> yieldPlanList=baseMapper.selectList(new QueryWrapper<YieldPlan>().lambda()
.eq(YieldPlan::getIsDeleted, 0).eq(YieldPlan::getPlanType, 12002) .eq(YieldPlan::getIsDeleted, 0).eq(YieldPlan::getPlanType, 12002)
.eq(YieldPlan::getGenerateGlassCake, 0));; .eq(YieldPlan::getGenerateGlassCake, 0));;
List<String> partCodeList=yieldPlanList.stream().map(x->x.getPartCode()).toList(); List<String> partCodeList=yieldPlanList.stream().map(x->x.getPartCode()).toList();
//b1. 查询该计划的零件是否是玻璃相关的零件列表(sub_cursor) //查询该计划的零件是否是玻璃相关的零件列表(sub_cursor)
List<DsPartEntity> dsPartList=dsPartService.list(new QueryWrapper<DsPartEntity>().lambda() List<DsPartEntity> dsPartList=dsPartService.list(new QueryWrapper<DsPartEntity>().lambda()
.in(DsPartEntity::getPartCode, partCodeList) .in(DsPartEntity::getPartCode, partCodeList)
.like(DsPartEntity::getPartName, "玻璃"));// 获取零件信息 .like(DsPartEntity::getPartName, "玻璃"));// 获取零件信息
List<String> partList=dsPartList.stream().map(x->x.getPartCode()).toList(); Map<String, List<DsPartEntity>> partMap = dsPartList.stream()
.collect(Collectors.groupingBy(DsPartEntity::getPartCode));
List<YieldOrder> yieldOrderList = new ArrayList<>();
List<StRealtimeStock> realtimeStocks = new ArrayList<>();
// 初始化序号
String maxCardNo = yieldOrderService.getMaxCardNo();
Long startNum = 1L;
if (StringUtils.hasText(maxCardNo)) {
startNum = Long.valueOf(maxCardNo.replace("RB" + new SimpleDateFormat("yyMMdd").format(new Date()), "")) + 1;
}
AtomicLong counter = new AtomicLong(startNum);
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
//遍历烧结主制计划列表
yieldPlanList.forEach(yieldPlan -> { yieldPlanList.forEach(yieldPlan -> {
if(!partList.contains(yieldPlan.getPartCode())){ //若不含玻璃相关的零件,表示不需要生成
if (!partMap.containsKey(yieldPlan.getPartCode())) {
yieldPlan.setGenerateGlassCake(1); yieldPlan.setGenerateGlassCake(1);
yieldPlan.setId(yieldPlan.getId()); yieldPlan.setId(yieldPlan.getId());
baseMapper.updateById(yieldPlan); baseMapper.updateById(yieldPlan);
return;
} }
//b3.1 生成流程卡号、批次号 //遍历零件列表
//查询RB相关的流程卡号 List<DsPartEntity> dsPartEntities = partMap.get(yieldPlan.getPartCode());
String cardNo=yieldOrderService.getMaxCardNo();; dsPartEntities.forEach(dsPartEntity -> {
Long num; //生成流程卡号、批次号
if(StringUtils.isEmpty(cardNo)){ // 生成序号,全局自增,而不是每个外层循环重新开始
num=1L; long num = counter.getAndIncrement();
}else { String cardNo = "RB" + dateStr + String.format("%05d", num);
num=Long.valueOf(cardNo.replace("RB"+new SimpleDateFormat("yyMMdd").format(new Date()), ""))+1; String bathNo = "Y" + dateStr + String.format("%05d", num);
} //创建生产订单并赋值
cardNo="RB"+new SimpleDateFormat("yyMMdd").format(new Date())+String.format("%05d", num); YieldOrder yieldOrder = new YieldOrder();
String bathNo="Y"+new SimpleDateFormat("yyMMdd").format(new Date())+String.format("%05d", num); yieldOrder.setRoamNo("");
//调用公共保存方法 todo String yoCode = "WO-B" + new SimpleDateFormat("yyMMdd").format(new Date()) + String.format("%05d", num);
//查询order订单 yieldOrder.setRoamNoNext("");
for (int i = 0; i < dsPartList.size(); i++) { yieldOrder.setYoCode(yoCode);
DsPartEntity dsPart = dsPartList.get(i); yieldOrder.setYpCode("");
List<YieldOrder> yieldOrderList=yieldOrderService.list(new QueryWrapper<YieldOrder>() yieldOrder.setPartCode(dsPartEntity.getPartCode());
.lambda().eq(YieldOrder::getYpCode, yieldPlan.getYpCode()) yieldOrder.setPartName(dsPartEntity.getPartName());
.eq(YieldOrder::getCardNo, cardNo) yieldOrder.setProductIdent(yieldPlan.getProductIdent());
.eq(YieldOrder::getBatchNo, bathNo) yieldOrder.setUseDept("热表分厂");
.eq(YieldOrder::getRoamNo, yieldPlan.getRoamNo())); yieldOrder.setDemandDate(yieldPlan.getDemandDate());
if(yieldOrderList.size()>0){ if (null != UserCache.getUser(yieldPlan.getPlanUser())) {
new ServiceException("'零件号【' "+dsPart.getPartCode()+" '】,批号【'\n" + yieldOrder.setPlanUser(UserCache.getUser(yieldPlan.getPlanUser()).getRealName());
" "+bathNo+" '】工单已转交,请勿重复转交!!'");
}
DsPartEntity zPartEntity = dsPartService.getOne(new QueryWrapper<DsPartEntity>().lambda()
.eq(DsPartEntity::getPartCode, yieldPlan.getPartCode()).last("limit 1"));
if(zPartEntity.getArea()==null){
yieldPlan.setYpArea(0.0);
}
Long vPriority=baseMapper.getMaxPriority(yieldPlan.getYpCode());
//7. 厂内生产急件标识赋值
Long vCount=baseMapper.getCount(yieldPlan.getYpCode(),yieldPlan.getPartCode(),bathNo);
YieldOrder yieldOrder=new YieldOrder();
vPriority=vPriority+14000;
yieldOrder.setPriorityErp(Integer.parseInt(vPriority.toString()));
if(vCount>0){
yieldOrder.setSiteWork(true);
yieldOrder.setPriorityErp(5);
}
if("2".equals(yieldOrder.getYieldType())||"3".equals(yieldOrder.getYieldType())){
yieldOrder.setSiteWork( true);
yieldOrder.setReceiveStatus(11000);
}
if("3".equals(yieldOrder.getYieldType())){
yieldOrder.setStatus(11001);
} }
//对接受人赋值 yieldOrder.setReleaseDate(new Date());
Long receiveUser=baseMapper.getReceiveUser(); yieldOrder.setMemo(yieldPlan.getMemo());
yieldOrder.setReceiveUser(receiveUser); yieldOrder.setCardNo(cardNo);
//对接收时间进行赋值 yieldOrder.setBatchNo(bathNo);
yieldOrder.setReceiveTime(new Date()); yieldOrder.setYpQty(yieldPlan.getYpQty().doubleValue());
yieldOrder.setYieldType(3);
yieldOrder.setEntrustDept("热表分厂");
yieldOrder.setUseDeptCode("3400");
yieldOrderList.add(yieldOrder);
LineMemoVo lineMemoVo = baseMapper.getLineMemo(yieldPlan.getYpCode()); //玻璃饼预占用
if(lineMemoVo!=null&&lineMemoVo.getSum()==0){ //从仓库相关表中查询指定物料的可用库存记录
yieldOrder.setMemo(""); List<StRealtimeStock> stRealtimeStockList = stRealtimeStockClient.getRealtimeStockByGood(dsPartEntity.getPartCode());
yieldOrder.setYpProductLine(""); //汇总指定物料的总库存、总已占用库存
}else { StGoodStatisVO stGoodStatisVO = stRealtimeStockClient.countQuantityAndOccupyQuantity(dsPartEntity.getPartCode());
yieldOrder.setMemo(lineMemoVo.getMemo()); //计算子件需要占用的总数量
yieldOrder.setYpProductLine(lineMemoVo.getProdLine()); AtomicReference<Double> subPorqty = new AtomicReference<>(yieldPlan.getYpQty().doubleValue());
//判断库存是否满足需求并逐行占用
if (null == stGoodStatisVO || CollUtil.isEmpty(stRealtimeStockList)) {
return;
} }
//保存订单 if (stGoodStatisVO.getTotalQuantity() - stGoodStatisVO.getZyQuantity() >= subPorqty.get()) {
yieldOrderService.saveOrUpdate(yieldOrder); stRealtimeStockList.forEach(stRealtimeStock -> {
StRealtimeStock rs = new StRealtimeStock();
if (stRealtimeStock.getQuantity() - stRealtimeStock.getOccupyQuantity() >= subPorqty.get()) {
//当前库存记录的可用库存 ≥ 剩余需要占用的数量
//只占用当前记录的部分库存:已占用数量 += 剩余需要占用的数量
rs.setId(stRealtimeStock.getId());
rs.setOccupyQuantity(stRealtimeStock.getOccupyQuantity() + subPorqty.get());
realtimeStocks.add(rs);
} else {
//当前库存记录的可用库存 < 剩余需要占用的数量
//剩余需要占用的数量 = 剩余数量 - 当前记录的可用库存
subPorqty.set(dsPartEntity.getQuota() - (stRealtimeStock.getQuantity() - stRealtimeStock.getOccupyQuantity()));
rs.setId(stRealtimeStock.getId());
rs.setOccupyQuantity(stRealtimeStock.getQuantity());
realtimeStocks.add(rs);
} }
// dsPartList.forEach(dsPart -> { });
// List<StRealtimeStock> stockList=stRealtimeStockService.getGoodsByPartCode(dsPart.getPartCode()); }
// StGoodStatisVO statisVO=stRealtimeStockService.getGoodsByCode(dsPart.getPartCode()); });
// Double subPorqty=dsPart.getQuota()*yieldPlan.getDeliveryQty() ; //调用生成订单的通用存储方法,保存玻璃饼生产订单
// if(statisVO.getTotalQuantity()-statisVO.getZyQuantity()>=subPorqty){ yieldOrderService.saveOrder(yieldOrderList);
// stockList.forEach(stock -> { //更新库存记录
// if(stock.getQuantity()-stock.getOccupyQuantity()>=subPorqty){ stRealtimeStockClient.saveOrUpdateBatch(realtimeStocks);
// StRealtimeStock rs=new StRealtimeStock();
// rs.setId(stock.getId());
// rs.setOccupyQuantity(rs.getOccupyQuantity()+subPorqty);
// stRealtimeStockService.updateById(rs);
// }else {
// StRealtimeStock rs=new StRealtimeStock();
// rs.setId(stock.getId());
// rs.setOccupyQuantity(rs.getQuantity());
// stRealtimeStockService.updateById(rs);
// }
// });
// }
// });
//更新状态标记为已读`update MES_YIELD_PLAN set GENERATE_GLASS_CAKE = 1 where id = ?` //更新状态标记为已读`update MES_YIELD_PLAN set GENERATE_GLASS_CAKE = 1 where id = ?`
yieldPlan.setGenerateGlassCake(1); yieldPlan.setGenerateGlassCake(1);
yieldPlan.setId(yieldPlan.getId());
baseMapper.updateById(yieldPlan); baseMapper.updateById(yieldPlan);
}); });
} }

@ -17,5 +17,7 @@ public interface ErpMesRbWoMapper extends Mapper {
* *
* @return * @return
*/ */
List<MesRbWo> getYieldPlanErpList(); List<MesRbWo> getYieldPlanErpList(String newlevdateMax);
String getNewlevdateMax(String selectTime);
} }

@ -21,8 +21,21 @@
a.kdofplat, a.kdofplat,
a.processlinedesc, a.processlinedesc,
a.prodline a.prodline
FROM dba_mgr.v_mes_rb_wo FROM dba_mgr.v_mes_rb_wo a
<where>
a.wopordat <![CDATA[ >= ]]> to_date(#{newlevdateMax},'YYYY-MM-DD HH24:MI:SS')
</where>
WHERE rownum <![CDATA[ <= ]]> 2000 WHERE rownum <![CDATA[ <= ]]> 2000
</select> </select>
<select id="getNewlevdateMax" resultType="java.lang.String">
SELECT nvl(max(a.wopordat), selectTime)
as newlevdateMax
FROM dba_mgr.v_mes_rb_wo a
<where>
a.is_deleted = 0
AND a.wopordat <![CDATA[ >= ]]> to_date(#{selectTime},'YYYY-MM-DD HH24:MI:SS')
</where>
ORDER BY a.wopordat DESC;
</select>
</mapper> </mapper>

@ -10,17 +10,22 @@ import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.order.feign.IApsOrderClient; import org.springblade.desk.order.feign.IApsOrderClient;
import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.pojo.enums.YieldPlanEnum; import org.springblade.desk.order.pojo.enums.YieldPlanEnum;
import org.springblade.erpdata.mapper.ErpMesRbWoMapper; import org.springblade.erpdata.mapper.ErpMesRbWoMapper;
import org.springblade.erpdata.pojo.dto.table.Rrbwoerptomes; import org.springblade.erpdata.pojo.dto.table.Rrbwoerptomes;
import org.springblade.erpdata.pojo.dto.table.Wo; import org.springblade.erpdata.pojo.dto.table.Wo;
import org.springblade.erpdata.pojo.dto.view.*; import org.springblade.erpdata.pojo.dto.view.*;
import org.springblade.erpdata.service.*; import org.springblade.erpdata.service.*;
import org.springblade.system.cache.DictCache;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @author lqk * @author lqk
@ -58,12 +63,18 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
@Override @Override
public List<MesRbWo> getList(MesRbWo entity) { public List<MesRbWo> getList(MesRbWo entity) {
return mesRbWoMapper.getYieldPlanErpList(); return mesRbWoMapper.getYieldPlanErpList(entity.getWoreqdat());
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synMesRbWo() { public void synMesRbWo() {
List<MesRbWo> mesRbWoList=mesRbWoMapper.getYieldPlanErpList(); //用字典的code查更新日期
String selectTime = apsOrderClient.getSelectTime("SYCN_MESRBWO_TIME");
//从ERP视图查询最大日期
String newlevdateMax = mesRbWoMapper.getNewlevdateMax(selectTime);
apsOrderClient.upByDateMax(newlevdateMax, "SYCN_MESRBWO_TIME");
List<MesRbWo> mesRbWoList = mesRbWoMapper.getYieldPlanErpList(newlevdateMax);
/** /**
* 有多个实体类 * 有多个实体类
* b1. 根据零件号从`DS_PART`表中查询零件信息 * b1. 根据零件号从`DS_PART`表中查询零件信息
@ -73,26 +84,18 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
* INTO v_product_type, v_part_name, v_po_area, v_craft_way, v_config_no * INTO v_product_type, v_part_name, v_po_area, v_craft_way, v_config_no
* FROM ds_part a WHERE a.part_code = v_prtno; * FROM ds_part a WHERE a.part_code = v_prtno;
*/ */
List<DsPartEntity> dsPartList=new ArrayList<>();//todo 获取零件信息 List<DsPartEntity> dsPartList = apsOrderClient.getPartList();
List<String> partCodeList=dsPartList.stream().map(x->x.getPartCode()).toList(); Map<String, DsPartEntity> partMap = dsPartList.stream().collect(Collectors.toMap(DsPartEntity::getPartCode, v -> v));
List<YieldPlan> yieldPlanList=new ArrayList<>(); List<YieldPlan> yieldPlanList=new ArrayList<>();
//若零件不为空, 验证零件是否存在二级零件工艺 //若零件不为空, 验证零件是否存在二级零件工艺
List<DsCraftEntity> dsCraftList= apsOrderClient.getDsCraftList(); List<DsCraftEntity> dsCraftList= apsOrderClient.getDsCraftList();
List<Long> partIdList=dsCraftList.stream().map(x->x.getPartId()).toList(); List<Long> partIdList = dsCraftList.stream().map(x -> x.getPartId()).toList();
final Long[] partId = {0L}; final Long[] partId = {0L};
List<Rrbwoerptomes> rbwoerptomesList=new ArrayList<>(); List<Rrbwoerptomes> rbwoerptomesList=new ArrayList<>();
mesRbWoList.forEach(mesRbWo -> { mesRbWoList.forEach(mesRbWo -> {
YieldPlan yieldPlan=new YieldPlan(); YieldPlan yieldPlan=new YieldPlan();
//b1. 根据零件号从`DS_PART`表中查询零件信息 //b1. 根据零件号从`DS_PART`表中查询零件信息
dsPartList.forEach(dsPart -> { DsPartEntity dsPart = partMap.get(mesRbWo.getPrtno());
if(dsPartList!=null&&dsPart.getPartCode().equals(mesRbWo.getPrtno())){
yieldPlan.setProductType(dsPart.getProductType());
yieldPlan.setPartName(dsPart.getPartName());
yieldPlan.setYpArea(dsPart.getArea());
yieldPlan.setPrimaryCraft(dsPart.getCraftWay());
partId[0] =dsPart.getId();
}
});
yieldPlan.setPlanType(12001L);//赋值默认值12001 yieldPlan.setPlanType(12001L);//赋值默认值12001
if(mesRbWo.getProcesslinedesc().contains("封接") if(mesRbWo.getProcesslinedesc().contains("封接")
||"LX08-05-028,LX08-05-030,LX08-05-031".contains(mesRbWo.getProcessline())){ ||"LX08-05-028,LX08-05-030,LX08-05-031".contains(mesRbWo.getProcessline())){
@ -103,11 +106,16 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldPlan.setStatus(YieldPlanEnum.STATUS_DISPATCHED.getCode()); yieldPlan.setStatus(YieldPlanEnum.STATUS_DISPATCHED.getCode());
yieldPlan.setRoamNo(""); yieldPlan.setRoamNo("");
//1. 若零件为空 //1. 若零件为空
if(!partCodeList.contains(mesRbWo.getPrtno())){ if (null == dsPart) {
yieldPlan.setStatus(YieldPlanEnum.STATUS_NO_CRAFT.getCode()); yieldPlan.setStatus(YieldPlanEnum.STATUS_NO_CRAFT.getCode());
yieldPlan.setRoamNo("无零件信息!!"); yieldPlan.setRoamNo("无零件信息!!");
}else {//2. 若零件不为空, 验证零件是否存在二级零件工艺 } else {
if(partId==null||partId[0]==null||(partId!=null&&partId[0]!=null&&!partIdList.contains(partId[0]))){ yieldPlan.setProductType(dsPart.getProductType());
yieldPlan.setPartName(dsPart.getPartName());
yieldPlan.setYpArea(dsPart.getArea());
yieldPlan.setPrimaryCraft(dsPart.getCraftWay());
//2. 若零件不为空, 验证零件是否存在二级零件工艺
if (!partIdList.contains(dsPart.getId())) {
yieldPlan.setStatus(YieldPlanEnum.STATUS_NO_CRAFT.getCode()); yieldPlan.setStatus(YieldPlanEnum.STATUS_NO_CRAFT.getCode());
yieldPlan.setRoamNo("无二级工艺信息!!"); yieldPlan.setRoamNo("无二级工艺信息!!");
} }
@ -128,7 +136,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
rbwoerptomesList.add(rbwoerptomes); rbwoerptomesList.add(rbwoerptomes);
}); });
apsOrderClient.saveList(yieldPlanList); apsOrderClient.saveList(yieldPlanList);
rbwoerptomesService.saveOrUpdateBatch(rbwoerptomesList); // rbwoerptomesService.saveOrUpdateBatch(rbwoerptomesList);
} }
@Override @Override
@ -164,6 +172,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
* 同步关闭计划 * 同步关闭计划
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synCloseProdPlan() { public void synCloseProdPlan() {
List<YieldPlan> yieldPlanList=apsOrderClient.getClosePlanList(); List<YieldPlan> yieldPlanList=apsOrderClient.getClosePlanList();
yieldPlanList.forEach(yieldPlan -> { yieldPlanList.forEach(yieldPlan -> {
@ -187,11 +196,14 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
return R.data(wo); return R.data(wo);
} }
/** /**
* 同步采购工单 * 同步物资转车间协作加工
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synPurchase() { public void synPurchase() {
//用字典的code查更新日期
String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERCG_TIME1"); String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERCG_TIME1");
//从ERP视图查询最大日期
String newlevdateMax=mesRbPurtosoService.getNewlevdateMax(selectTime); String newlevdateMax=mesRbPurtosoService.getNewlevdateMax(selectTime);
apsOrderClient.upByDateMax(newlevdateMax, "SYCN_TRANSFERCG_TIME1"); apsOrderClient.upByDateMax(newlevdateMax, "SYCN_TRANSFERCG_TIME1");
List<MesRbPurtoso> purtosoList=mesRbPurtosoService.getMesRbPurtosoList(newlevdateMax); List<MesRbPurtoso> purtosoList=mesRbPurtosoService.getMesRbPurtosoList(newlevdateMax);
@ -217,9 +229,10 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPkUsername(mesRbPurtoso.getNewlevname()); yieldOrder.setPkUsername(mesRbPurtoso.getNewlevname());
yieldOrder.setPkDate(mesRbPurtoso.getNewlevdate()); yieldOrder.setPkDate(mesRbPurtoso.getNewlevdate());
List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbPurtoso.getPrtno()); List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbPurtoso.getPrtno());
yieldOrder.setYieldType(12001); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode());
if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){ //若零件不为空,查询零件的工艺路线
yieldOrder.setYieldType(12002); if (dsPartList != null && dsPartList.get(0).getCraftWay().contains("封接")) {
yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode());
} }
yieldOrder.setRoamNo("");//当前b号 yieldOrder.setRoamNo("");//当前b号
yieldOrder.setRoamNoNext("");//下级b号 yieldOrder.setRoamNoNext("");//下级b号
@ -238,8 +251,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
* 同步临时工单 * 同步临时工单
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synTemporary() { public void synTemporary() {
//用字典的code查更新日期
String selectTime=apsOrderClient.getSelectTime("SYCN_PACTURNRECORD_TIME"); String selectTime=apsOrderClient.getSelectTime("SYCN_PACTURNRECORD_TIME");
//从ERP视图查询最大日期
String newlevdateMax=mesRbPacturnrecordService.getNewlevdateMax(selectTime); String newlevdateMax=mesRbPacturnrecordService.getNewlevdateMax(selectTime);
apsOrderClient.upByDateMax(newlevdateMax, "SYCN_PACTURNRECORD_TIME"); apsOrderClient.upByDateMax(newlevdateMax, "SYCN_PACTURNRECORD_TIME");
List<MesRbPacturnrecord> pacturnrecordList=mesRbPacturnrecordService.getMesRbPacturnrecordList(newlevdateMax); List<MesRbPacturnrecord> pacturnrecordList=mesRbPacturnrecordService.getMesRbPacturnrecordList(newlevdateMax);
@ -273,6 +289,8 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbPacturnrecord.getPrtno(),mesRbPacturnrecord.getFirseq()); String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbPacturnrecord.getPrtno(),mesRbPacturnrecord.getFirseq());
yieldOrder.setRoamNoNext(roamNoNext);//下级b号 yieldOrder.setRoamNoNext(roamNoNext);//下级b号
} }
//委托车间
yieldOrder.setEntrustDept(mesRbPacturnrecord.getDeptno());
yieldOrderList.add(yieldOrder); yieldOrderList.add(yieldOrder);
}); });
this.saveOrder(yieldOrderList); this.saveOrder(yieldOrderList);
@ -281,8 +299,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
* 同步烧结数据 * 同步烧结数据
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synSinter() { public void synSinter() {
//用字典的code查更新日期
String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERSJ_TIME"); String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERSJ_TIME");
//从ERP视图查询最大日期
String newlevdateMax=mesRbSjsoService.getNewlevdateMax(selectTime); String newlevdateMax=mesRbSjsoService.getNewlevdateMax(selectTime);
apsOrderClient.upByDateMax(newlevdateMax, "SYCN_TRANSFERSJ_TIME"); apsOrderClient.upByDateMax(newlevdateMax, "SYCN_TRANSFERSJ_TIME");
List<MesRbSjso> rbtosoList=mesRbSjsoService.getMesRbSjsoList(newlevdateMax); List<MesRbSjso> rbtosoList=mesRbSjsoService.getMesRbSjsoList(newlevdateMax);
@ -305,7 +326,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setUseDeptCode(mesRbtoso.getPrtudeptcode()); yieldOrder.setUseDeptCode(mesRbtoso.getPrtudeptcode());
yieldOrder.setPkUsername(mesRbtoso.getNewlevname()); yieldOrder.setPkUsername(mesRbtoso.getNewlevname());
yieldOrder.setPkDate(mesRbtoso.getNewlevdate()); yieldOrder.setPkDate(mesRbtoso.getNewlevdate());
yieldOrder.setYieldType(12002); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode());
yieldOrder.setRoamNoNext( ""); yieldOrder.setRoamNoNext( "");
if(StringUtils.isNotEmpty(mesRbtoso.getFirseq())){ if(StringUtils.isNotEmpty(mesRbtoso.getFirseq())){
String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbtoso.getPrtno(),mesRbtoso.getFirseq()); String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbtoso.getPrtno(),mesRbtoso.getFirseq());
@ -319,8 +340,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
* 同步采购LOTTJ * 同步采购LOTTJ
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synPurchaseLOTTJ() { public void synPurchaseLOTTJ() {
//用字典的code查更新日期
String selectTime=apsOrderClient.getSelectTime("SYCN_BUYTRANSFER_TIME"); String selectTime=apsOrderClient.getSelectTime("SYCN_BUYTRANSFER_TIME");
//从ERP视图查询最大日期
String dateMax=mesRbWxpromotionService.getNewlevdateMax(selectTime); String dateMax=mesRbWxpromotionService.getNewlevdateMax(selectTime);
apsOrderClient.upByDateMax(dateMax,"SYCN_BUYTRANSFER_TIME"); apsOrderClient.upByDateMax(dateMax,"SYCN_BUYTRANSFER_TIME");
List<MesRbWxpromotion> wxpromotionList=mesRbWxpromotionService.getMesRbWxpromotionList(dateMax); List<MesRbWxpromotion> wxpromotionList=mesRbWxpromotionService.getMesRbWxpromotionList(dateMax);
@ -345,9 +369,9 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPkUsername(mesRbWxpromotion.getNewlevname()); yieldOrder.setPkUsername(mesRbWxpromotion.getNewlevname());
yieldOrder.setPkDate(mesRbWxpromotion.getNewlevdate()); yieldOrder.setPkDate(mesRbWxpromotion.getNewlevdate());
List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbWxpromotion.getPrtno()); List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbWxpromotion.getPrtno());
yieldOrder.setYieldType(12001); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode());
if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){ if (dsPartList != null && dsPartList.get(0).getCraftWay().contains("封接")) {
yieldOrder.setYieldType(12002); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode());
} }
yieldOrder.setRoamNo("");//当前b号 yieldOrder.setRoamNo("");//当前b号
yieldOrder.setRoamNoNext("");//下级b号 yieldOrder.setRoamNoNext("");//下级b号
@ -366,8 +390,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
* 同步外协工单 * 同步外协工单
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synOutsourcing() { public void synOutsourcing() {
//用字典的code查更新日期
String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERWX_TIME"); String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERWX_TIME");
//从ERP视图查询最大日期
String dateMax=erpMesRbSodelrecwxService.getNewlevdateMax(selectTime); String dateMax=erpMesRbSodelrecwxService.getNewlevdateMax(selectTime);
apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERWX_TIME"); apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERWX_TIME");
List<MesRbSodelrecwx> mesRbSodelrecwxList=erpMesRbSodelrecwxService.getMesRbSodelrecwxList(dateMax); List<MesRbSodelrecwx> mesRbSodelrecwxList=erpMesRbSodelrecwxService.getMesRbSodelrecwxList(dateMax);
@ -391,9 +418,9 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPkUsername(mesRbSodelrecwx.getNewlevname()); yieldOrder.setPkUsername(mesRbSodelrecwx.getNewlevname());
yieldOrder.setPkDate(mesRbSodelrecwx.getNewlevdate()); yieldOrder.setPkDate(mesRbSodelrecwx.getNewlevdate());
List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelrecwx.getPrtno()); List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelrecwx.getPrtno());
yieldOrder.setYieldType(12001); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode());
if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){ if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){
yieldOrder.setYieldType(12002); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode());
} }
yieldOrder.setRoamNo("");//当前b号 yieldOrder.setRoamNo("");//当前b号
yieldOrder.setRoamNoNext("");//下级b号 yieldOrder.setRoamNoNext("");//下级b号
@ -412,13 +439,18 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
* 同步工艺工单 * 同步工艺工单
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synCraft() { public void synCraft() {
//用字典的code查更新日期
String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERZG_TIME1"); String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERZG_TIME1");
//从ERP视图查询最大日期
String dateMax=erpMesRbSodelreczgService.getNewlevdateMax(selectTime); String dateMax=erpMesRbSodelreczgService.getNewlevdateMax(selectTime);
//更新配置表的基准时间
apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERZG_TIME1"); apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERZG_TIME1");
List<MesRbSodelreczg> mesRbSodelreczgList=erpMesRbSodelreczgService.getMesRbSodelreczgList(dateMax); List<MesRbSodelreczg> mesRbSodelreczgList=erpMesRbSodelreczgService.getMesRbSodelreczgList(dateMax);
List<YieldOrder> yieldOrderList=new ArrayList<>(); List<YieldOrder> yieldOrderList=new ArrayList<>();
mesRbSodelreczgList.forEach(mesRbSodelreczg -> { mesRbSodelreczgList.forEach(mesRbSodelreczg -> {
//将查询出的数据放到单个的变量中
YieldOrder yieldOrder=new YieldOrder(); YieldOrder yieldOrder=new YieldOrder();
yieldOrder.setYpMemo("正式工艺转工"); yieldOrder.setYpMemo("正式工艺转工");
yieldOrder.setManualIncrease(false); yieldOrder.setManualIncrease(false);
@ -437,30 +469,39 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setUseDeptCode(mesRbSodelreczg.getPrtudeptcode()); yieldOrder.setUseDeptCode(mesRbSodelreczg.getPrtudeptcode());
yieldOrder.setPkUsername(mesRbSodelreczg.getNewlevname()); yieldOrder.setPkUsername(mesRbSodelreczg.getNewlevname());
yieldOrder.setPkDate(mesRbSodelreczg.getNewlevdate()); yieldOrder.setPkDate(mesRbSodelreczg.getNewlevdate());
//从零件表中查询零件信息
List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelreczg.getPrtno()); List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelreczg.getPrtno());
yieldOrder.setYieldType(12001); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode());
if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){ //若零件不为空,查询零件的工艺路线
yieldOrder.setYieldType(12002); if (dsPartList != null && dsPartList.get(0).getCraftWay().contains("封接")) {
yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode());
} }
yieldOrder.setRoamNo("");//当前b号 yieldOrder.setRoamNo("");//当前b号
yieldOrder.setRoamNoNext("");//下级b号 yieldOrder.setRoamNoNext("");//下级b号
//根据零件号和上级b号查询视图
Long vCount=mesRbPartoplinkService.getVcount(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq()); Long vCount=mesRbPartoplinkService.getVcount(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq());
if(vCount>0){ if(vCount>0){
//从ERP视图中查询当前B号
String roamNo=mesRbPartoplinkService.getRoamNo(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq()); String roamNo=mesRbPartoplinkService.getRoamNo(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq());
yieldOrder.setRoamNo(roamNo);//当前b号 yieldOrder.setRoamNo(roamNo);//当前b号
//从ERP视图中查询下级B号
String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq()); String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq());
yieldOrder.setRoamNoNext(roamNoNext);//下级b号 yieldOrder.setRoamNoNext(roamNoNext);//下级b号
} }
yieldOrderList.add(yieldOrder); yieldOrderList.add(yieldOrder);
}); });
//调用通用保存方法,保存生产订单
this.saveOrder(yieldOrderList); this.saveOrder(yieldOrderList);
} }
/** /**
* 同步配套工单 * 同步配套工单
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void synSupportingFacilities() { public void synSupportingFacilities() {
//用字典的code查更新日期
String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERPK_TIME"); String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERPK_TIME");
//从ERP视图查询最大日期
String dateMax=erpMesRbPkService.getNewlevdateMax(selectTime); String dateMax=erpMesRbPkService.getNewlevdateMax(selectTime);
apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERPK_TIME"); apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERPK_TIME");
List<MesRbPk> mesRbPkList=erpMesRbPkService.getMesRbPkList(dateMax); List<MesRbPk> mesRbPkList=erpMesRbPkService.getMesRbPkList(dateMax);
@ -485,7 +526,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setUseDeptCode(mesRbPk.getPrtudeptcode()); yieldOrder.setUseDeptCode(mesRbPk.getPrtudeptcode());
yieldOrder.setPkUsername(mesRbPk.getNewlevname()); yieldOrder.setPkUsername(mesRbPk.getNewlevname());
yieldOrder.setPkDate(mesRbPk.getNewlevdate()); yieldOrder.setPkDate(mesRbPk.getNewlevdate());
yieldOrder.setYieldType(12001); yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode());
yieldOrder.setRoamNoNext( ""); yieldOrder.setRoamNoNext( "");
if(StringUtils.isNotEmpty(mesRbPk.getFirseq())){ if(StringUtils.isNotEmpty(mesRbPk.getFirseq())){
String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbPk.getPrtno(),mesRbPk.getFirseq()); String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbPk.getPrtno(),mesRbPk.getFirseq());
@ -495,21 +536,14 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
}); });
this.saveOrder(yieldOrderList); this.saveOrder(yieldOrderList);
} }
private void saveOrder(List<YieldOrder> yieldOrderList){
yieldOrderList.forEach(order -> {
Long vCount=0L;//apsOrderClient.getCount(transfer.getYoCode(),transfer.getCardNo(),transfer.getBatchNo(),transfer.getWorkRoam());
if(vCount>0) {
/*
v_excnote := '零件号' || v_part_code || '批号' || v_batch_no || '工单已转交请勿重复转交';
v_excflag := '0';
RETURN;
*/
}
List<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(order.getPartCode());
if(dsPartList!=null&&dsPartList.size()>0){
} /**
}); * 生产订单通用保存方法
apsOrderClient.saveOrderList(yieldOrderList); *
* @param yieldOrderList
*/
private void saveOrder(List<YieldOrder> yieldOrderList) {
apsOrderClient.saveOrder(yieldOrderList);
// apsOrderClient.saveOrderList(yieldOrderList);
} }
} }

@ -12,12 +12,15 @@ import org.springblade.core.mp.support.Query;
import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.wms.pojo.entity.StGoods; import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springblade.wms.pojo.vo.StGoodStatisVO;
import org.springblade.wms.pojo.vo.StRealtimeStockVO; import org.springblade.wms.pojo.vo.StRealtimeStockVO;
import org.springblade.wms.service.IStGoodsNewService; import org.springblade.wms.service.IStGoodsNewService;
import org.springblade.wms.service.IStRealtimeStockService; import org.springblade.wms.service.IStRealtimeStockService;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
@ -71,4 +74,19 @@ public class StRealtimeStockClientImpl implements StRealtimeStockClient {
return R.data(detail); return R.data(detail);
} }
@Override
public List<StRealtimeStock> getRealtimeStockByGood(String goodCode) {
return stRealtimeStockService.getGoodsByPartCode(goodCode);
}
@Override
public StGoodStatisVO countQuantityAndOccupyQuantity(String goodCode) {
return stRealtimeStockService.getGoodsByCode(goodCode);
}
@Override
public R saveOrUpdateBatch(List<StRealtimeStock> stockList) {
return this.saveOrUpdateBatch(stockList);
}
} }

@ -99,12 +99,14 @@ public interface IStRealtimeStockService extends BaseService<StRealtimeStock> {
* @param partCode * @param partCode
* @return * @return
*/ */
// List<StRealtimeStock> getGoodsByPartCode(String partCode); List<StRealtimeStock> getGoodsByPartCode(String partCode);
// /**
// * 根据物料编码统计信息 /**
// * @param partCode * 根据物料编码统计信息
// * @return *
// */ * @param partCode
// StGoodStatisVO getGoodsByCode(String partCode); * @return
*/
StGoodStatisVO getGoodsByCode(String partCode);
} }

@ -912,6 +912,16 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl<StRealtimeStockM
return resultMap; return resultMap;
} }
@Override
public List<StRealtimeStock> getGoodsByPartCode(String partCode) {
return baseMapper.getGoodsByPartCode(partCode);
}
@Override
public StGoodStatisVO getGoodsByCode(String partCode) {
return baseMapper.getGoodsByCode(partCode);
}
private String generateBarcodeAsBase64(String content, int width, int height) { private String generateBarcodeAsBase64(String content, int width, int height) {
try { try {
// 1. 创建条形码(Code128 类型) // 1. 创建条形码(Code128 类型)

Loading…
Cancel
Save